n8n-nodes-amazonscraperapi 0.1.0-beta.1
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 +165 -0
- package/dist/credentials/AmazonScraperApiApi.credentials.d.ts +10 -0
- package/dist/credentials/AmazonScraperApiApi.credentials.js +43 -0
- package/dist/credentials/AmazonScraperApiApi.credentials.js.map +1 -0
- package/dist/nodes/AmazonScraperApi/AmazonScraperApi.node.d.ts +4 -0
- package/dist/nodes/AmazonScraperApi/AmazonScraperApi.node.js +71 -0
- package/dist/nodes/AmazonScraperApi/AmazonScraperApi.node.js.map +1 -0
- package/dist/nodes/AmazonScraperApi/AmazonScraperApi.node.json +18 -0
- package/dist/nodes/AmazonScraperApi/amazonscraperapi.svg +12 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Batch.description.d.ts +3 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Batch.description.js +125 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Batch.description.js.map +1 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Product.description.d.ts +3 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Product.description.js +135 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Product.description.js.map +1 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Search.description.d.ts +3 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Search.description.js +148 -0
- package/dist/nodes/AmazonScraperApi/descriptions/Search.description.js.map +1 -0
- package/dist/nodes/AmazonScraperApi/descriptions/SharedOptions.d.ts +3 -0
- package/dist/nodes/AmazonScraperApi/descriptions/SharedOptions.js +27 -0
- package/dist/nodes/AmazonScraperApi/descriptions/SharedOptions.js.map +1 -0
- package/dist/nodes/AmazonScraperApi/descriptions/index.d.ts +4 -0
- package/dist/nodes/AmazonScraperApi/descriptions/index.js +21 -0
- package/dist/nodes/AmazonScraperApi/descriptions/index.js.map +1 -0
- package/dist/package.json +60 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/index.js +5 -0
- package/package.json +60 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ChocoData (Amazon Scraper API)
|
|
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,165 @@
|
|
|
1
|
+
# n8n-nodes-amazonscraperapi
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/n8n-nodes-amazonscraperapi)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
|
|
6
|
+
An [n8n](https://n8n.io) community node for [Amazon Scraper API](https://www.amazonscraperapi.com/). Fetch structured Amazon product data, run keyword searches, and queue async bulk lookups — all inside your n8n workflows.
|
|
7
|
+
|
|
8
|
+
Amazon Scraper API is a managed Amazon-scraping endpoint with rotating residential proxies, automatic CAPTCHA handling, and structured JSON output for 20+ marketplaces. Flat $0.50 per 1,000 successful requests, billed only on 2xx responses. [1,000 free requests on signup](https://app.amazonscraperapi.com).
|
|
9
|
+
|
|
10
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
|
|
11
|
+
|
|
12
|
+
[Installation](#installation)
|
|
13
|
+
[Operations](#operations)
|
|
14
|
+
[Credentials](#credentials)
|
|
15
|
+
[Compatibility](#compatibility)
|
|
16
|
+
[Usage examples](#usage-examples)
|
|
17
|
+
[Resources](#resources)
|
|
18
|
+
[Version history](#version-history)
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
23
|
+
|
|
24
|
+
In short, inside any self-hosted n8n instance:
|
|
25
|
+
|
|
26
|
+
1. Go to **Settings → Community Nodes**.
|
|
27
|
+
2. Click **Install**.
|
|
28
|
+
3. Enter `n8n-nodes-amazonscraperapi` and click **Install**.
|
|
29
|
+
|
|
30
|
+
The node appears in the editor's node palette under **Amazon Scraper API**.
|
|
31
|
+
|
|
32
|
+
## Operations
|
|
33
|
+
|
|
34
|
+
The node exposes three resources:
|
|
35
|
+
|
|
36
|
+
### Product → Get
|
|
37
|
+
|
|
38
|
+
Fetch a single Amazon product by ASIN or URL. Wraps `GET /api/v1/amazon/product`.
|
|
39
|
+
|
|
40
|
+
| Field | Required | Description |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| ASIN or URL | yes | `B09HN3Q81F` or `https://www.amazon.com/dp/B09HN3Q81F` |
|
|
43
|
+
| Marketplace | no | Dropdown — defaults to amazon.com (US) |
|
|
44
|
+
| Simplify | no | Return only `{title, price, rating, availability, buybox_seller}` instead of the full structured response |
|
|
45
|
+
| Language | no | Locale, e.g. `en_US`, `de_DE` |
|
|
46
|
+
| Residential IP Country | no | ISO-2 code, e.g. `DE`, `JP` |
|
|
47
|
+
| Include Raw HTML | no | Append the raw page HTML to the response |
|
|
48
|
+
|
|
49
|
+
### Search → Search
|
|
50
|
+
|
|
51
|
+
Run a keyword search and return the SERP. Wraps `GET /api/v1/amazon/search`.
|
|
52
|
+
|
|
53
|
+
| Field | Required | Description |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| Query | yes | Keywords, same as the Amazon search bar |
|
|
56
|
+
| Marketplace | no | Dropdown — defaults to amazon.com (US) |
|
|
57
|
+
| Simplify | no | Return only `{position, asin, title, price, rating, sponsored}` per result |
|
|
58
|
+
| Sort By | no | best_match · price_asc · price_desc · avg_customer_review · newest |
|
|
59
|
+
| Start Page | no | 1-indexed, max 10 |
|
|
60
|
+
| Pages | no | Consecutive pages to scrape (1–10) |
|
|
61
|
+
|
|
62
|
+
Output is flattened to one item per SERP result.
|
|
63
|
+
|
|
64
|
+
### Bulk Lookup → Create / Get Status
|
|
65
|
+
|
|
66
|
+
Queue up to 1,000 ASINs as a single asynchronous job. Wraps `POST /api/v1/amazon/batch` and `GET /api/v1/amazon/batch/:id`.
|
|
67
|
+
|
|
68
|
+
**Create**
|
|
69
|
+
|
|
70
|
+
| Field | Required | Description |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| ASINs | yes | One ASIN per line, or comma-separated. Max 1,000 per batch. |
|
|
73
|
+
| Marketplace | no | Applied to every ASIN in the batch |
|
|
74
|
+
| Webhook URL | no | If supplied, the completed batch is POSTed to this URL when done. The response includes a one-time HMAC signing secret — save it to verify callbacks. |
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"id": "a1b2c3d4-...",
|
|
81
|
+
"status": "pending",
|
|
82
|
+
"total_count": 42,
|
|
83
|
+
"created_at": "2026-05-15T10:00:00Z",
|
|
84
|
+
"poll_url": "/api/v1/amazon/batch/a1b2c3d4-...",
|
|
85
|
+
"webhook_signature_secret": "whsec_..."
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Get Status**
|
|
90
|
+
|
|
91
|
+
| Field | Required | Description |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| Batch ID | yes | The job ID returned by Create |
|
|
94
|
+
| Simplify | no | Return only `{id, status, processed_count, total_count, results}` |
|
|
95
|
+
|
|
96
|
+
Poll every 30–60 seconds until `status === 'complete'`.
|
|
97
|
+
|
|
98
|
+
## Credentials
|
|
99
|
+
|
|
100
|
+
Get your API key at [app.amazonscraperapi.com](https://app.amazonscraperapi.com) — 1,000 free requests, no credit card required.
|
|
101
|
+
|
|
102
|
+
In n8n:
|
|
103
|
+
|
|
104
|
+
1. Open the node, click the **Credential to connect with** dropdown, and choose **Create new credential**.
|
|
105
|
+
2. Paste your API key into the **API Key** field.
|
|
106
|
+
3. Click **Save**. n8n runs a credential test against `GET /api/v1/amazon/product?query=B07THLLDLG&domain=com` to validate the key before saving.
|
|
107
|
+
|
|
108
|
+
The key is sent on every request as the `X-API-Key` header.
|
|
109
|
+
|
|
110
|
+
## Compatibility
|
|
111
|
+
|
|
112
|
+
- Tested against n8n `1.62.x` and newer.
|
|
113
|
+
- Node.js `>= 20.15` (matches n8n's runtime).
|
|
114
|
+
- No runtime dependencies; the node uses n8n's built-in declarative request runner.
|
|
115
|
+
|
|
116
|
+
## Usage examples
|
|
117
|
+
|
|
118
|
+
### Track an ASIN's price daily and alert on drops
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
Schedule Trigger (daily, 09:00)
|
|
122
|
+
→ Amazon Scraper API : Product → Get (ASIN: B09HN3Q81F, Simplify: true)
|
|
123
|
+
→ IF $json.price.current < 199
|
|
124
|
+
→ Slack : Send Message
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Hourly competitor SERP snapshot to Google Sheets
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
Schedule Trigger (hourly)
|
|
131
|
+
→ Amazon Scraper API : Search → Search (Query: "wireless headphones", Sort: price_asc)
|
|
132
|
+
→ Google Sheets : Append Row
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Bulk price refresh for a 500-ASIN catalog (webhook-driven)
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
Schedule Trigger (every 6h)
|
|
139
|
+
→ Read 500 ASINs from Google Sheets
|
|
140
|
+
→ Amazon Scraper API : Bulk Lookup → Create (Webhook URL: <your callback URL>)
|
|
141
|
+
|
|
142
|
+
Webhook Trigger (the callback URL above)
|
|
143
|
+
→ Loop Over Items ($json.results)
|
|
144
|
+
→ Update Google Sheets row by ASIN
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
See [WORKFLOW_TEMPLATES.md](./WORKFLOW_TEMPLATES.md) for importable JSON.
|
|
148
|
+
|
|
149
|
+
## Resources
|
|
150
|
+
|
|
151
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
|
|
152
|
+
- [Amazon Scraper API docs](https://amazonscraperapi.com/docs)
|
|
153
|
+
- [Amazon Scraper API pricing](https://amazonscraperapi.com/pricing)
|
|
154
|
+
- [Node.js SDK on npm](https://www.npmjs.com/package/amazon-scraper-api-sdk)
|
|
155
|
+
- [Python SDK](https://pypi.org/project/amazonscraperapi-sdk/) · [Go SDK](https://github.com/ChocoData-com/amazon-scraper-api-sdk-go) · [CLI](https://www.npmjs.com/package/amazon-scraper-api-cli) · [MCP server](https://www.npmjs.com/package/amazon-scraper-api-mcp)
|
|
156
|
+
|
|
157
|
+
## Version history
|
|
158
|
+
|
|
159
|
+
| Version | Notes |
|
|
160
|
+
|---|---|
|
|
161
|
+
| 0.1.0 | Initial release — Product Get, Search, Bulk Lookup (Create + Get Status) operations. Declarative-style node with provenance-signed npm release. |
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class AmazonScraperApiApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: Icon;
|
|
6
|
+
documentationUrl: string;
|
|
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.AmazonScraperApiApi = void 0;
|
|
4
|
+
class AmazonScraperApiApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'amazonScraperApiApi';
|
|
7
|
+
this.displayName = 'Amazon Scraper API';
|
|
8
|
+
this.icon = 'file:../nodes/AmazonScraperApi/amazonscraperapi.svg';
|
|
9
|
+
this.documentationUrl = 'https://amazonscraperapi.com/docs/authentication';
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'API Key',
|
|
13
|
+
name: 'apiKey',
|
|
14
|
+
type: 'string',
|
|
15
|
+
typeOptions: { password: true },
|
|
16
|
+
default: '',
|
|
17
|
+
required: true,
|
|
18
|
+
description: 'Get your API key from <a href="https://app.amazonscraperapi.com" target="_blank">app.amazonscraperapi.com</a>. The first 1,000 requests are free.',
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
this.authenticate = {
|
|
22
|
+
type: 'generic',
|
|
23
|
+
properties: {
|
|
24
|
+
headers: {
|
|
25
|
+
'X-API-Key': '={{$credentials.apiKey}}',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
this.test = {
|
|
30
|
+
request: {
|
|
31
|
+
baseURL: 'https://api.amazonscraperapi.com',
|
|
32
|
+
url: '/api/v1/amazon/product',
|
|
33
|
+
method: 'GET',
|
|
34
|
+
qs: {
|
|
35
|
+
query: 'B07THLLDLG',
|
|
36
|
+
domain: 'com',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.AmazonScraperApiApi = AmazonScraperApiApi;
|
|
43
|
+
//# sourceMappingURL=AmazonScraperApiApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AmazonScraperApiApi.credentials.js","sourceRoot":"","sources":["../../credentials/AmazonScraperApiApi.credentials.ts"],"names":[],"mappings":";;;AAmBA,MAAa,mBAAmB;IAAhC;QACC,SAAI,GAAG,qBAAqB,CAAC;QAE7B,gBAAW,GAAG,oBAAoB,CAAC;QAEnC,SAAI,GAAS,qDAAqD,CAAC;QAEnE,qBAAgB,GAAG,kDAAkD,CAAC;QAEtE,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,mJAAmJ;aACpJ;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,WAAW,EAAE,0BAA0B;iBACvC;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kCAAkC;gBAC3C,GAAG,EAAE,wBAAwB;gBAC7B,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE;oBACH,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,KAAK;iBACb;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA1CD,kDA0CC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AmazonScraperApi = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const descriptions_1 = require("./descriptions");
|
|
6
|
+
class AmazonScraperApi {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.description = {
|
|
9
|
+
displayName: 'Amazon Scraper API',
|
|
10
|
+
name: 'amazonScraperApi',
|
|
11
|
+
icon: 'file:amazonscraperapi.svg',
|
|
12
|
+
group: ['transform'],
|
|
13
|
+
version: 1,
|
|
14
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
15
|
+
description: 'Fetch Amazon product data, run keyword searches, and queue bulk lookups via Amazon Scraper API',
|
|
16
|
+
defaults: {
|
|
17
|
+
name: 'Amazon Scraper API',
|
|
18
|
+
},
|
|
19
|
+
usableAsTool: true,
|
|
20
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
21
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
22
|
+
credentials: [
|
|
23
|
+
{
|
|
24
|
+
name: 'amazonScraperApiApi',
|
|
25
|
+
required: true,
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
requestDefaults: {
|
|
29
|
+
baseURL: 'https://api.amazonscraperapi.com',
|
|
30
|
+
headers: {
|
|
31
|
+
Accept: 'application/json',
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
properties: [
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Resource',
|
|
38
|
+
name: 'resource',
|
|
39
|
+
type: 'options',
|
|
40
|
+
noDataExpression: true,
|
|
41
|
+
options: [
|
|
42
|
+
{
|
|
43
|
+
name: 'Bulk Lookup',
|
|
44
|
+
value: 'batch',
|
|
45
|
+
description: 'Queue up to 1,000 ASINs as one async batch job',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Product',
|
|
49
|
+
value: 'product',
|
|
50
|
+
description: 'Fetch a single Amazon product by ASIN or URL',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Search',
|
|
54
|
+
value: 'search',
|
|
55
|
+
description: 'Run a keyword search and return the SERP',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
default: 'product',
|
|
59
|
+
},
|
|
60
|
+
...descriptions_1.productOperations,
|
|
61
|
+
...descriptions_1.productFields,
|
|
62
|
+
...descriptions_1.searchOperations,
|
|
63
|
+
...descriptions_1.searchFields,
|
|
64
|
+
...descriptions_1.batchOperations,
|
|
65
|
+
...descriptions_1.batchFields,
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.AmazonScraperApi = AmazonScraperApi;
|
|
71
|
+
//# sourceMappingURL=AmazonScraperApi.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AmazonScraperApi.node.js","sourceRoot":"","sources":["../../../nodes/AmazonScraperApi/AmazonScraperApi.node.ts"],"names":[],"mappings":";;;AAAA,+CAA8F;AAC9F,iDAOwB;AAsBxB,MAAa,gBAAgB;IAA7B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EACV,gGAAgG;YACjG,QAAQ,EAAE;gBACT,IAAI,EAAE,oBAAoB;aAC1B;YACD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,kCAAkC;gBAC3C,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,aAAa;4BACnB,KAAK,EAAE,OAAO;4BACd,WAAW,EAAE,gDAAgD;yBAC7D;wBACD;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;4BAChB,WAAW,EAAE,8CAA8C;yBAC3D;wBACD;4BACC,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,QAAQ;4BACf,WAAW,EAAE,0CAA0C;yBACvD;qBACD;oBACD,OAAO,EAAE,SAAS;iBAClB;gBACD,GAAG,gCAAiB;gBACpB,GAAG,4BAAa;gBAChB,GAAG,+BAAgB;gBACnB,GAAG,2BAAY;gBACf,GAAG,8BAAe;gBAClB,GAAG,0BAAW;aACd;SACD,CAAC;IACH,CAAC;CAAA;AA9DD,4CA8DC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-base.amazonScraperApi",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Marketing", "Data & Storage"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://github.com/ChocoData-com/n8n-nodes-amazonscraperapi#credentials"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"primaryDocumentation": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://github.com/ChocoData-com/n8n-nodes-amazonscraperapi#operations"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 60 60" fill="none">
|
|
2
|
+
<!-- Brand background tile -->
|
|
3
|
+
<rect width="60" height="60" rx="12" fill="#131A22"/>
|
|
4
|
+
<!-- Stylised "A" — Amazon-orange wordmark glyph -->
|
|
5
|
+
<path d="M14 42 L24 18 L30 18 L40 42 L34 42 L32.2 37 L21.8 37 L20 42 Z M23.6 32 L30.4 32 L27 23 Z"
|
|
6
|
+
fill="#FF9900"/>
|
|
7
|
+
<!-- The classic Amazon smile arrow, looped under the A -->
|
|
8
|
+
<path d="M12 47 Q30 56 48 47"
|
|
9
|
+
stroke="#FF9900" stroke-width="3" stroke-linecap="round" fill="none"/>
|
|
10
|
+
<!-- Arrowhead at the right end of the smile -->
|
|
11
|
+
<path d="M44 44 L48 47 L44 50" stroke="#FF9900" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
12
|
+
</svg>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.batchFields = exports.batchOperations = void 0;
|
|
4
|
+
const SharedOptions_1 = require("./SharedOptions");
|
|
5
|
+
const showOnlyForBatchCreate = {
|
|
6
|
+
resource: ['batch'],
|
|
7
|
+
operation: ['create'],
|
|
8
|
+
};
|
|
9
|
+
const showOnlyForBatchGet = {
|
|
10
|
+
resource: ['batch'],
|
|
11
|
+
operation: ['getStatus'],
|
|
12
|
+
};
|
|
13
|
+
exports.batchOperations = [
|
|
14
|
+
{
|
|
15
|
+
displayName: 'Operation',
|
|
16
|
+
name: 'operation',
|
|
17
|
+
type: 'options',
|
|
18
|
+
noDataExpression: true,
|
|
19
|
+
displayOptions: { show: { resource: ['batch'] } },
|
|
20
|
+
options: [
|
|
21
|
+
{
|
|
22
|
+
name: 'Create',
|
|
23
|
+
value: 'create',
|
|
24
|
+
action: 'Create a bulk lookup',
|
|
25
|
+
description: 'Queue up to 1,000 ASINs as a single async job. Returns a job ID — poll "Get Status" or supply a webhook URL for the callback.',
|
|
26
|
+
routing: {
|
|
27
|
+
request: {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
url: '/api/v1/amazon/batch',
|
|
30
|
+
body: {
|
|
31
|
+
endpoint: 'amazon.product',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'Get Status',
|
|
38
|
+
value: 'getStatus',
|
|
39
|
+
action: 'Get bulk lookup status',
|
|
40
|
+
description: 'Fetch the status of a bulk lookup job. When status === "complete", the response includes the parsed results for every ASIN.',
|
|
41
|
+
routing: {
|
|
42
|
+
request: {
|
|
43
|
+
method: 'GET',
|
|
44
|
+
url: '=/api/v1/amazon/batch/{{$parameter.batchId}}',
|
|
45
|
+
},
|
|
46
|
+
output: {
|
|
47
|
+
postReceive: [
|
|
48
|
+
{
|
|
49
|
+
type: 'set',
|
|
50
|
+
properties: {
|
|
51
|
+
value: '={{ $parameter.simplify ? { id: $responseItem.id, status: $responseItem.status, processed_count: $responseItem.processed_count, total_count: $responseItem.total_count, results: $responseItem.results } : $responseItem }}',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
default: 'create',
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
exports.batchFields = [
|
|
63
|
+
{
|
|
64
|
+
displayName: 'ASINs',
|
|
65
|
+
name: 'asins',
|
|
66
|
+
type: 'string',
|
|
67
|
+
typeOptions: { rows: 6 },
|
|
68
|
+
default: '',
|
|
69
|
+
required: true,
|
|
70
|
+
placeholder: 'B09HN3Q81F\nB000ALVUM6\nB07THLLDLG',
|
|
71
|
+
description: 'One ASIN per line, or comma-separated. Max 1,000 per batch. Each ASIN is queued against the marketplace selected below.',
|
|
72
|
+
displayOptions: { show: showOnlyForBatchCreate },
|
|
73
|
+
routing: {
|
|
74
|
+
send: {
|
|
75
|
+
type: 'body',
|
|
76
|
+
property: 'items',
|
|
77
|
+
value: '={{ ($value || "").split(/[\\n,]+/).map((s) => s.trim()).filter(Boolean).map((q) => ({ query: q, domain: $parameter.domain })) }}',
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
displayName: 'Marketplace',
|
|
83
|
+
name: 'domain',
|
|
84
|
+
type: 'options',
|
|
85
|
+
options: SharedOptions_1.marketplaceOptions,
|
|
86
|
+
default: SharedOptions_1.DEFAULT_MARKETPLACE,
|
|
87
|
+
description: 'Marketplace applied to every ASIN in the batch',
|
|
88
|
+
displayOptions: { show: showOnlyForBatchCreate },
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
displayName: 'Webhook URL',
|
|
92
|
+
name: 'webhookUrl',
|
|
93
|
+
type: 'string',
|
|
94
|
+
default: '',
|
|
95
|
+
placeholder: 'https://your.server/webhooks/asa',
|
|
96
|
+
description: 'Optional. If supplied, we POST the completed batch to this URL when done so you do not have to poll. The response includes a one-time HMAC signing secret — save it to verify the callback. <a href="https://amazonscraperapi.com/docs/batch#webhooks" target="_blank">Webhook docs</a>.',
|
|
97
|
+
displayOptions: { show: showOnlyForBatchCreate },
|
|
98
|
+
routing: {
|
|
99
|
+
send: {
|
|
100
|
+
type: 'body',
|
|
101
|
+
property: 'webhook_url',
|
|
102
|
+
value: '={{ $value || undefined }}',
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
displayName: 'Batch ID',
|
|
108
|
+
name: 'batchId',
|
|
109
|
+
type: 'string',
|
|
110
|
+
default: '',
|
|
111
|
+
required: true,
|
|
112
|
+
placeholder: 'a1b2c3d4-5e6f-7890-abcd-ef1234567890',
|
|
113
|
+
description: 'The job ID returned by the "Create" operation. Polls the batch endpoint until the job completes.',
|
|
114
|
+
displayOptions: { show: showOnlyForBatchGet },
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
displayName: 'Simplify',
|
|
118
|
+
name: 'simplify',
|
|
119
|
+
type: 'boolean',
|
|
120
|
+
default: false,
|
|
121
|
+
description: 'Whether to return only progress fields (identifier, status, processed_count, total_count, results) instead of the full job record',
|
|
122
|
+
displayOptions: { show: showOnlyForBatchGet },
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
//# sourceMappingURL=Batch.description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Batch.description.js","sourceRoot":"","sources":["../../../../nodes/AmazonScraperApi/descriptions/Batch.description.ts"],"names":[],"mappings":";;;AACA,mDAA0E;AAqB1E,MAAM,sBAAsB,GAAG;IAC9B,QAAQ,EAAE,CAAC,OAAO,CAAC;IACnB,SAAS,EAAE,CAAC,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC3B,QAAQ,EAAE,CAAC,OAAO,CAAC;IACnB,SAAS,EAAE,CAAC,WAAW,CAAC;CACxB,CAAC;AAEW,QAAA,eAAe,GAAsB;IACjD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE;QACjD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,sBAAsB;gBAC9B,WAAW,EACV,+HAA+H;gBAChI,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,sBAAsB;wBAC3B,IAAI,EAAE;4BACL,QAAQ,EAAE,gBAAgB;yBAC1B;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,wBAAwB;gBAChC,WAAW,EACV,6HAA6H;gBAC9H,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,8CAA8C;qBACnD;oBACD,MAAM,EAAE;wBACP,WAAW,EAAE;4BACZ;gCACC,IAAI,EAAE,KAAK;gCACX,UAAU,EAAE;oCACX,KAAK,EAAE,6NAA6N;iCACpO;6BACD;yBACD;qBACD;iBACD;aACD;SACD;QACD,OAAO,EAAE,QAAQ;KACjB;CACD,CAAC;AAEW,QAAA,WAAW,GAAsB;IAE7C;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;QACxB,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,oCAAoC;QACjD,WAAW,EACV,yHAAyH;QAC1H,cAAc,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;QAChD,OAAO,EAAE;YACR,IAAI,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO;gBACjB,KAAK,EACJ,mIAAmI;aACpI;SACD;KACD;IACD;QACC,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,kCAAkB;QAC3B,OAAO,EAAE,mCAAmB;QAC5B,WAAW,EAAE,gDAAgD;QAC7D,cAAc,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;KAChD;IACD;QACC,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EACV,0RAA0R;QAC3R,cAAc,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE;QAChD,OAAO,EAAE;YACR,IAAI,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,4BAA4B;aACnC;SACD;KACD;IAED;QACC,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,sCAAsC;QACnD,WAAW,EAAE,kGAAkG;QAC/G,cAAc,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;KAC7C;IACD;QACC,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EACV,mIAAmI;QACpI,cAAc,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;KAC7C;CACD,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.productFields = exports.productOperations = void 0;
|
|
4
|
+
const SharedOptions_1 = require("./SharedOptions");
|
|
5
|
+
const showOnlyForProductGet = {
|
|
6
|
+
resource: ['product'],
|
|
7
|
+
operation: ['get'],
|
|
8
|
+
};
|
|
9
|
+
exports.productOperations = [
|
|
10
|
+
{
|
|
11
|
+
displayName: 'Operation',
|
|
12
|
+
name: 'operation',
|
|
13
|
+
type: 'options',
|
|
14
|
+
noDataExpression: true,
|
|
15
|
+
displayOptions: { show: { resource: ['product'] } },
|
|
16
|
+
options: [
|
|
17
|
+
{
|
|
18
|
+
name: 'Get',
|
|
19
|
+
value: 'get',
|
|
20
|
+
action: 'Get a product',
|
|
21
|
+
description: 'Fetch a structured product JSON for one ASIN: title, price, rating, images, variants, seller, categories',
|
|
22
|
+
routing: {
|
|
23
|
+
request: {
|
|
24
|
+
method: 'GET',
|
|
25
|
+
url: '/api/v1/amazon/product',
|
|
26
|
+
},
|
|
27
|
+
output: {
|
|
28
|
+
postReceive: [
|
|
29
|
+
{
|
|
30
|
+
type: 'set',
|
|
31
|
+
properties: {
|
|
32
|
+
value: '={{ $parameter.simplify ? { title: $responseItem.title, price: $responseItem.price, rating: $responseItem.rating, availability: $responseItem.availability, buybox_seller: ($responseItem.buybox && $responseItem.buybox.seller) || null } : $responseItem }}',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
default: 'get',
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
exports.productFields = [
|
|
44
|
+
{
|
|
45
|
+
displayName: 'ASIN or URL',
|
|
46
|
+
name: 'query',
|
|
47
|
+
type: 'string',
|
|
48
|
+
default: '',
|
|
49
|
+
required: true,
|
|
50
|
+
placeholder: 'B09HN3Q81F',
|
|
51
|
+
description: 'The Amazon ASIN (10 characters) or full Amazon product URL. Examples: <code>B09HN3Q81F</code>, <code>https://www.amazon.com/dp/B09HN3Q81F</code>.',
|
|
52
|
+
displayOptions: { show: showOnlyForProductGet },
|
|
53
|
+
routing: {
|
|
54
|
+
send: {
|
|
55
|
+
type: 'query',
|
|
56
|
+
property: 'query',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
displayName: 'Marketplace',
|
|
62
|
+
name: 'domain',
|
|
63
|
+
type: 'options',
|
|
64
|
+
options: SharedOptions_1.marketplaceOptions,
|
|
65
|
+
default: SharedOptions_1.DEFAULT_MARKETPLACE,
|
|
66
|
+
description: 'Which Amazon marketplace to scrape. Defaults to amazon.com (US).',
|
|
67
|
+
displayOptions: { show: showOnlyForProductGet },
|
|
68
|
+
routing: {
|
|
69
|
+
send: {
|
|
70
|
+
type: 'query',
|
|
71
|
+
property: 'domain',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
displayName: 'Simplify',
|
|
77
|
+
name: 'simplify',
|
|
78
|
+
type: 'boolean',
|
|
79
|
+
default: false,
|
|
80
|
+
description: 'Whether to return only the most common fields (title, price, rating, availability, buybox seller). Leave off to receive the full structured response.',
|
|
81
|
+
displayOptions: { show: showOnlyForProductGet },
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
displayName: 'Additional Options',
|
|
85
|
+
name: 'additionalOptions',
|
|
86
|
+
type: 'collection',
|
|
87
|
+
placeholder: 'Add Option',
|
|
88
|
+
default: {},
|
|
89
|
+
displayOptions: { show: showOnlyForProductGet },
|
|
90
|
+
options: [
|
|
91
|
+
{
|
|
92
|
+
displayName: 'Language',
|
|
93
|
+
name: 'language',
|
|
94
|
+
type: 'string',
|
|
95
|
+
default: '',
|
|
96
|
+
placeholder: 'en_US',
|
|
97
|
+
description: 'Locale code for the page (e.g. <code>en_US</code>, <code>de_DE</code>). Defaults to the marketplace default.',
|
|
98
|
+
routing: {
|
|
99
|
+
send: {
|
|
100
|
+
type: 'query',
|
|
101
|
+
property: 'language',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
displayName: 'Residential IP Country',
|
|
107
|
+
name: 'country',
|
|
108
|
+
type: 'string',
|
|
109
|
+
default: '',
|
|
110
|
+
placeholder: 'DE',
|
|
111
|
+
description: 'ISO-2 country code for the residential exit IP (e.g. <code>DE</code>, <code>JP</code>). Overrides the default which matches the marketplace.',
|
|
112
|
+
routing: {
|
|
113
|
+
send: {
|
|
114
|
+
type: 'query',
|
|
115
|
+
property: 'country',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
displayName: 'Include Raw HTML',
|
|
121
|
+
name: 'add_html',
|
|
122
|
+
type: 'boolean',
|
|
123
|
+
default: false,
|
|
124
|
+
description: 'Whether to include the raw page HTML alongside the structured JSON',
|
|
125
|
+
routing: {
|
|
126
|
+
send: {
|
|
127
|
+
type: 'query',
|
|
128
|
+
property: 'add_html',
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
];
|
|
135
|
+
//# sourceMappingURL=Product.description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Product.description.js","sourceRoot":"","sources":["../../../../nodes/AmazonScraperApi/descriptions/Product.description.ts"],"names":[],"mappings":"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"}
|