n8n-nodes-mangools 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +133 -0
- package/dist/credentials/MangoolsApi.credentials.d.ts +10 -0
- package/dist/credentials/MangoolsApi.credentials.js +43 -0
- package/dist/credentials/MangoolsApi.credentials.js.map +1 -0
- package/dist/icons/mangools.dark.svg +7 -0
- package/dist/icons/mangools.svg +7 -0
- package/dist/nodes/Mangools/GeneratedOperations.d.ts +3 -0
- package/dist/nodes/Mangools/GeneratedOperations.js +1599 -0
- package/dist/nodes/Mangools/GeneratedOperations.js.map +1 -0
- package/dist/nodes/Mangools/Mangools.node.d.ts +4 -0
- package/dist/nodes/Mangools/Mangools.node.js +39 -0
- package/dist/nodes/Mangools/Mangools.node.js.map +1 -0
- package/dist/nodes/Mangools/Mangools.node.json +18 -0
- package/dist/package.json +60 -0
- package/package.json +60 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mangools
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# n8n-nodes-mangools
|
|
2
|
+
|
|
3
|
+
This is an n8n community node. It lets you read SEO data from [Mangools](https://mangools.com/) —
|
|
4
|
+
KWFinder, SERPChecker, SERPWatcher, LinkMiner, SiteProfiler and AI Search Watcher — in your n8n
|
|
5
|
+
workflows.
|
|
6
|
+
|
|
7
|
+
[n8n](https://n8n.io/) is a fair-code licensed
|
|
8
|
+
workflow automation platform.
|
|
9
|
+
|
|
10
|
+
[Installation](#installation)
|
|
11
|
+
[Operations](#operations)
|
|
12
|
+
[Credentials](#credentials)
|
|
13
|
+
[Compatibility](#compatibility)
|
|
14
|
+
[Usage](#usage)
|
|
15
|
+
[Quotas](#quotas)
|
|
16
|
+
[Development](#development)
|
|
17
|
+
[Resources](#resources)
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in
|
|
22
|
+
the n8n community nodes documentation, using the package name `n8n-nodes-mangools`.
|
|
23
|
+
|
|
24
|
+
## Operations
|
|
25
|
+
|
|
26
|
+
25 read operations across 8 resources.
|
|
27
|
+
|
|
28
|
+
- **Account**
|
|
29
|
+
- Get Limits — remaining balance of every quota pool
|
|
30
|
+
- **KWFinder**
|
|
31
|
+
- Get Related Keywords, Get Competitor Keywords, Get Suggested Keywords
|
|
32
|
+
- Get Competitor Domains
|
|
33
|
+
- Get URL Difficulty Metrics
|
|
34
|
+
- **SERPChecker**
|
|
35
|
+
- Get SERP, Get URL Metrics
|
|
36
|
+
- **SERPWatcher**
|
|
37
|
+
- Get Many Trackings, Get Tracking Detail, Get Many Tracked Keywords, Get Tracking Stats
|
|
38
|
+
- **AI Search Watcher**
|
|
39
|
+
- Get Many Monitors, Get Monitor, Get Many Monitor Prompts, Get Prompt, Get Many Models
|
|
40
|
+
- **LinkMiner**
|
|
41
|
+
- Get Many Backlinks, Get URL Metrics
|
|
42
|
+
- **SiteProfiler**
|
|
43
|
+
- Get Overview, Get Many Competitors, Get Backlink Profile, Get Many Top Content
|
|
44
|
+
- **Location**
|
|
45
|
+
- Search, Get — resolve the `location_id` the KWFinder and SERPChecker operations need
|
|
46
|
+
|
|
47
|
+
Write operations (creating trackings, editing keyword lists, deleting monitors) are deliberately
|
|
48
|
+
not exposed. This node is read-only.
|
|
49
|
+
|
|
50
|
+
## Credentials
|
|
51
|
+
|
|
52
|
+
The Mangools API authenticates with a single API key sent in the `x-access-token` header.
|
|
53
|
+
|
|
54
|
+
1. Sign in at [mangools.com](https://mangools.com/) or register a free account.
|
|
55
|
+
2. Open <https://mangools.com/api-token>.
|
|
56
|
+
3. Copy the API key.
|
|
57
|
+
4. In n8n, create a new **Mangools API** credential and paste the key into **API Key**.
|
|
58
|
+
|
|
59
|
+
Select **Test** to check the credential. The test calls `GET /kwfinder/lists`, which consumes no
|
|
60
|
+
quota and returns `401` on an invalid key.
|
|
61
|
+
|
|
62
|
+
## Compatibility
|
|
63
|
+
|
|
64
|
+
Built and linted against `n8n-workflow` 2.36.3 with `@n8n/node-cli` 0.45.3 on Node.js 22, and
|
|
65
|
+
loaded and executed in n8n 2.36.6 on Node.js 24.
|
|
66
|
+
|
|
67
|
+
The node uses `NodeConnectionTypes`, themed (light/dark) icons and `usableAsTool`. Those require a
|
|
68
|
+
reasonably recent n8n; if the node fails to load, upgrade n8n first.
|
|
69
|
+
|
|
70
|
+
To use the node as an AI agent tool on a self-hosted instance, start n8n with
|
|
71
|
+
`N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true`.
|
|
72
|
+
|
|
73
|
+
## Usage
|
|
74
|
+
|
|
75
|
+
The KWFinder and SERPChecker operations take a numeric **Location ID**, not a country name. Resolve
|
|
76
|
+
it with **Location → Search**:
|
|
77
|
+
|
|
78
|
+
1. **Location → Search** with **Query** `New York`. Each match arrives as its own item; read `_id`
|
|
79
|
+
and check `label` to confirm it is the place you meant.
|
|
80
|
+
2. **KWFinder → Get Related Keywords** with **Keyword**, and **Options → Location ID** set to that
|
|
81
|
+
`_id`. **Language ID** is optional and also numeric.
|
|
82
|
+
|
|
83
|
+
Operations that emit **one n8n item per record** — Related Keywords, Competitor Keywords, Suggested
|
|
84
|
+
Keywords, Get Many Backlinks, Get Many Monitors, Get Many Models, Location Search, Get Competitor
|
|
85
|
+
Domains, LinkMiner URL Metrics — need no Split Out node before a Filter or Sort. Every other
|
|
86
|
+
operation emits a single item holding the whole response.
|
|
87
|
+
|
|
88
|
+
One exception is worth knowing about: `GET /kwfinder/competitor-domain` returns a bare array of
|
|
89
|
+
strings, so **KWFinder → Get Competitor Domains** emits one item per domain whose `json` *is* the
|
|
90
|
+
domain string. Reference it as `{{ $json }}`, not `{{ $json.something }}`.
|
|
91
|
+
|
|
92
|
+
## Quotas
|
|
93
|
+
|
|
94
|
+
Mangools bills per request against named quota pools rather than a single request counter.
|
|
95
|
+
`GET /kwfinder/limits` (**Account → Get Limits**) reports the remaining balance of each pool.
|
|
96
|
+
|
|
97
|
+
Every operation's description in the node UI says whether it counts towards a paid quota pool.
|
|
98
|
+
The pool is the `x-quota-pool` value of that operation in the OpenAPI document at
|
|
99
|
+
`https://api.mangools.com/v3/openapi.json`.
|
|
100
|
+
|
|
101
|
+
## Development
|
|
102
|
+
|
|
103
|
+
The node's operations, parameters and routing are **generated from the Mangools OpenAPI document**,
|
|
104
|
+
which is downloaded at build time from `https://api.mangools.com/v3/openapi.json` and never stored
|
|
105
|
+
in git. Set `SPEC_URL` to fetch it from somewhere else. A build that cannot fetch the spec fails.
|
|
106
|
+
|
|
107
|
+
```shell
|
|
108
|
+
npm install
|
|
109
|
+
npm run fetch-spec # download openapi/openapi.json
|
|
110
|
+
npm run generate # write nodes/Mangools/GeneratedOperations.ts and docs/operations.md
|
|
111
|
+
npm run sync # both of the above
|
|
112
|
+
npm run lint # fetch, generate, then n8n-node lint
|
|
113
|
+
npm run lint:nodes-base # eslint-plugin-n8n-nodes-base, standalone
|
|
114
|
+
npm run build # fetch, generate, then n8n-node build
|
|
115
|
+
npm run dev # run a local n8n with this node loaded
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Which operations are exposed, identified by `operationId`, and their n8n-facing names and descriptions live in
|
|
119
|
+
`scripts/operations.config.json`. Everything else — HTTP method, URL, parameters, types, required
|
|
120
|
+
flags, defaults, parameter descriptions, quota pools, base URL — comes from the spec. The generator fails if
|
|
121
|
+
the spec and the selected operations disagree.
|
|
122
|
+
|
|
123
|
+
## Resources
|
|
124
|
+
|
|
125
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
|
|
126
|
+
- [Mangools API documentation](https://apidocs.mangools.com)
|
|
127
|
+
- [Using n8n with the hosted Mangools MCP server instead](https://apidocs.mangools.com/integrations/n8n/)
|
|
128
|
+
|
|
129
|
+
## License
|
|
130
|
+
|
|
131
|
+
[MIT](LICENSE)
|
|
132
|
+
|
|
133
|
+
This repository is maintained by the Mangools team and does not accept external pull requests or issues. Please send questions and bug reports to support@mangools.com.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class MangoolsApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
icon: Icon;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MangoolsApi = void 0;
|
|
4
|
+
const GeneratedOperations_1 = require("../nodes/Mangools/GeneratedOperations");
|
|
5
|
+
class MangoolsApi {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'mangoolsApi';
|
|
8
|
+
this.displayName = 'Mangools API';
|
|
9
|
+
this.documentationUrl = 'https://github.com/mangools/n8n-nodes-mangools?tab=readme-ov-file#credentials';
|
|
10
|
+
this.icon = {
|
|
11
|
+
light: 'file:../icons/mangools.svg',
|
|
12
|
+
dark: 'file:../icons/mangools.dark.svg',
|
|
13
|
+
};
|
|
14
|
+
this.properties = [
|
|
15
|
+
{
|
|
16
|
+
displayName: 'API Key',
|
|
17
|
+
name: 'apiKey',
|
|
18
|
+
type: 'string',
|
|
19
|
+
typeOptions: { password: true },
|
|
20
|
+
default: '',
|
|
21
|
+
required: true,
|
|
22
|
+
description: 'Mangools API key. Copy it at https://mangools.com/api-token. Sent as the x-access-token header.',
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
this.authenticate = {
|
|
26
|
+
type: 'generic',
|
|
27
|
+
properties: {
|
|
28
|
+
headers: {
|
|
29
|
+
'x-access-token': '={{$credentials.apiKey}}',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
this.test = {
|
|
34
|
+
request: {
|
|
35
|
+
baseURL: GeneratedOperations_1.MANGOOLS_BASE_URL,
|
|
36
|
+
url: '/kwfinder/lists',
|
|
37
|
+
method: 'GET',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.MangoolsApi = MangoolsApi;
|
|
43
|
+
//# sourceMappingURL=MangoolsApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MangoolsApi.credentials.js","sourceRoot":"","sources":["../../credentials/MangoolsApi.credentials.ts"],"names":[],"mappings":";;;AAQA,+EAA0E;AAE1E,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QAErB,gBAAW,GAAG,cAAc,CAAC;QAE7B,qBAAgB,GAAG,+EAA+E,CAAC;QAEnG,SAAI,GAAS;YACZ,KAAK,EAAE,4BAA4B;YACnC,IAAI,EAAE,iCAAiC;SACvC,CAAC;QAEF,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EACV,iGAAiG;aAClG;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,gBAAgB,EAAE,0BAA0B;iBAC5C;aACD;SACD,CAAC;QAOF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,uCAAiB;gBAC1B,GAAG,EAAE,iBAAiB;gBACtB,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AA9CD,kCA8CC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" width="60" height="60">
|
|
2
|
+
<g transform="translate(10.15,-0.29) scale(0.536)">
|
|
3
|
+
<path fill="#FF7A83" d="M73.7,50.4c5,23.3-6.3,49.5-26.3,53.8c-20,4.3-41.2-14.8-46.2-38.1c-5-23.3,6.3-49.5,26.3-53.8C47.5,7.9,68.7,27.1,73.7,50.4z"/>
|
|
4
|
+
<ellipse transform="matrix(0.9773 -0.2118 0.2118 0.9773 -10.125 9.3129)" opacity="0.65" fill="#FFCB2E" cx="38.4" cy="51.9" rx="33" ry="38.3"/>
|
|
5
|
+
<ellipse transform="matrix(0.9773 -0.2117 0.2117 0.9773 -9.1168 9.7788)" fill="#FFCB2E" cx="41.1" cy="47.5" rx="27.8" ry="32.3"/>
|
|
6
|
+
</g>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" width="60" height="60">
|
|
2
|
+
<g transform="translate(10.15,-0.29) scale(0.536)">
|
|
3
|
+
<path fill="#FD5E69" d="M73.7,50.4c5,23.3-6.3,49.5-26.3,53.8c-20,4.3-41.2-14.8-46.2-38.1c-5-23.3,6.3-49.5,26.3-53.8C47.5,7.9,68.7,27.1,73.7,50.4z"/>
|
|
4
|
+
<ellipse transform="matrix(0.9773 -0.2118 0.2118 0.9773 -10.125 9.3129)" opacity="0.5" fill="#FFBE02" cx="38.4" cy="51.9" rx="33" ry="38.3"/>
|
|
5
|
+
<ellipse transform="matrix(0.9773 -0.2117 0.2117 0.9773 -9.1168 9.7788)" fill="#FFBE02" cx="41.1" cy="47.5" rx="27.8" ry="32.3"/>
|
|
6
|
+
</g>
|
|
7
|
+
</svg>
|