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 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>
@@ -0,0 +1,3 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const MANGOOLS_BASE_URL = "https://api.mangools.com/v3";
3
+ export declare const mangoolsOperations: INodeProperties[];