Connect
n8n
n8n is a workflow tool. It has an MCP node built in, so a workflow can call Scrapewise directly: search Google and Amazon, find local businesses, read a page, read your saved rows. It can then send the result to Google Sheets, Slack, a database or anything else n8n connects to.
No AI model is needed. The node calls one Scrapewise tool you choose, with the arguments you give it. You need n8n 1.80 or newer (Cloud or self-hosted).
- Make a key in the portal. Press your name at the bottom of the portal menu, then API Keys, type a Key name, pick the Read scope (the portal shows it as
LLM_READ) or the Full scope (LLM_FULL) and press Generate API Key. Copy the key. See Read or Full. - Template 2 (competitor price monitor) works with a Read key. The other five templates need a Full key.
- In n8n open the workflow menu and choose Import from File. Pick a template file from the list further down.
- Open the Scrapewise node and add a Bearer Auth credential. Paste the key on its own, without the word
Bearer. - Open the Google Sheets node, pick your Google account and set the spreadsheet id and tab name. Open each Slack node, add your Slack credential and set the channel, or delete the Slack node. The sheet is written before it.
- Open the settings node of the template (for example Search settings) and put your own values in. Every template starts with a sticky note Read me first with the same steps.
- Press Execute workflow once, then turn the schedule on.
Note
Each template ships with a credential-id placeholder and YOUR_SPREADSHEET_ID. n8n shows those nodes with a warning triangle until you replace them. That is your checklist.
- Use the HTTP Request node when you want the REST API instead of a tool. Use a Read key to read and a Full key to change.
- Add the same Bearer Auth credential as in the portal tab (a Read key or a Full key, as in step 2 there).
- Set the URL to
https://portal.scrapewise.ai/api/scraper-api/api/walletwith method GET to test it with a Read key. - Every route and the key it needs (Read or Full) are on the feature pages and on API basics.
- Add a node and search for MCP Client Tool. It uses your Read key or Full key credential.
- Set Endpoint URL to
https://mcp.scrapewise.ai/mcp, Server Transport toHTTP Streamable, Authentication toBearer Auth, and pick your Scrapewise credential. - Pick the tool, for example
search_amazon. The node lists the tools in a dropdown, so you can see the connection is live. A Read key lists the read tools. A Full key lists all tools. - Switch the input to JSON. Almost every tool takes its arguments inside a
bodyobject.get_results,cancel_jobandscrapewise_get_scraper_data_group_clienttake theirs at the top level. - Read the answer in a Code node. Depending on your n8n version it arrives parsed in
structuredContent, or as text incontent[0].text. Text from web pages is wrapped as{ "type": "scraped", "content": "..." }. Unwrap it before you write it to a sheet, and never let a later AI step treat it as an instruction. - A small request answers at once with
status: "DONE". A bigger one answersstatus: "RUNNING"and ajob_id. Wait, then callget_results(Read) with the id. Stop a job withcancel_job(Full). - Test with
scrapewise_get_scraper_group_list(Read) and an empty input{}. An empty list on a new account still proves the connection.
{
"body": {
"queries": ["lego duplo"],
"marketplace": "de",
"pages": 1,
"quote_only": false
}
}
Errors you may see
sw_live_... key with no Bearer in front.structuredContent or parse content[0].text. Rows of a group are under content, not rows.idempotency_key inside body on the retry. Identical requests within 24 hours are charged once.Questions
Do I need an OpenAI key or an AI Agent node?
No. The node calls one named tool with the arguments you wrote.
Which key does a template need?
Template 2 needs a Read key. Templates 1, 3, 4, 5 and 6 need a Full key.
Can I change the schedule?
Yes. Every schedule is a plain n8n Schedule Trigger. Open it, or swap it for a webhook.
The six templates
| # | Template | What you get | Runs | Tool it calls |
|---|---|---|---|---|
| 1 | Local business lead list | Name, address, phone, website, rating, reviews and category for a search in a place, filtered down to the contactable ones, plus a Slack digest | When you press the button | find_local_businesses |
| 2 | Competitor price monitor | Every product where a competitor is cheaper than you, with the gap in € and % | Daily, 08:00 | scrapewise_get_scraper_data_group_client |
| 3 | Amazon price tracker | Title, ASIN, price, rating and reviews for your keywords, one dated row each | Daily, 07:00 | search_amazon |
| 4 | Google rank tracker | The position your domain holds for each keyword, or “not in top results”, plus Slack alerts on slips and drop-outs and one daily digest | Daily, 06:00 | google_search |
| 5 | Google review watcher | Every review of the places you watch, plus a Slack alert on the bad ones | Daily, 09:00 | scrapewise_run_scraper_url_list |
| 6 | YouTube keyword watch | Which videos rank for your topics, with your own channel flagged, plus a Slack alert on videos published that week | Weekly, Monday 09:00 | scrapewise_run_scraper_url_list |
1. Local business lead list
Download: 01-google-maps-leads-to-google-sheets.json
Searches Google Maps for a trade in a place, drops the businesses you cannot act on, appends the rest to a sheet, and posts one Slack digest saying how many leads came in.
| Trigger | Manual - you press Execute workflow |
| Columns | Name, Address, Phone, Website, Rating, Reviews, Category |
| Cost | 10 credits per call = €0.0015 for up to 20 places |
| Key | Full |
| Also needs | Slack, for the digest in leads |
Set query, location, country, language and max_results in Search settings. One call returns up to
20 places.
Two filters run before the sheet, both set in Search settings:
| Setting | Ships as | What it drops |
|---|---|---|
| - | always on | Businesses with no website, since there is nothing to follow up |
min_rating | 4 | Businesses rated below this |
min_reviews | 5 | Businesses with fewer ratings than this, where the score means little |
So the sheet holds leads you can contact rather than everything Google listed. Set min_rating to 0 and
min_reviews to 0 to keep them all. Notify new lead then posts how many leads came in and the first ten
by name, category, rating and contact, so you do not have to open the sheet to know whether the run was worth
it.
Google Maps holds no e-mail addresses, so none are returned. The Website column is the starting point if you
need e-mail: send those websites to the Website contacts endpoint as a second step.
The template itself does not do that step.
To see the price before you spend anything, set quote_only to true in Search settings. The workflow then
writes one row holding the quote and your wallet balance instead of leads.
2. Competitor price monitor
Download: 02-competitor-price-monitor-with-matching.json
Reads a price-monitor group you already have in Scrapewise, groups the rows by the column that matches your product to the competitor’s (usually EAN), and keeps only the products where a competitor is cheaper than you. Writes the gaps to a sheet and sends one Slack message with the ten biggest.
| Trigger | Daily, 08:00 |
| Columns | Date, Match key, Product, My price, Cheapest competitor, Their price, Gap €, Gap % |
| Cost | Free - it reads rows you already paid to scrape |
| Key | Read |
| Also needs | Slack, for the ten biggest gaps in #pricing |
This template does not scrape. It reads what your scrapers already collected, so set the scrapers up first - the build-scrapers skill does that for you, or do it in the portal.
In Monitor settings, put in:
| Setting | What it is |
|---|---|
groupId | The group holding your prices and your competitors’ |
matchColumn | The column both sides share, usually ean |
shopColumn | The column saying which shop a row came from |
priceColumn | The column holding the price |
myShop | The value in shopColumn that means you |
rowsToRead | How many rows to read per run |
If a column name is wrong the workflow stops and the error message lists the column names the group actually has, so you can copy the right one straight out of it.
Prices written as 1.234,56 and 1,234.56 are both read correctly.
3. Amazon price tracker
Download: 03-amazon-price-tracker-to-google-sheets.json
Every morning, searches Amazon for each of your keywords and appends what it sells, with the date. Leave it running and the sheet becomes a price history you can chart.
| Trigger | Daily, 07:00 |
| Columns | Date, Title, ASIN, Price, Rating, Reviews, Link |
| Cost | 1 credit per result page = €0.00015 per keyword per page |
| Key | Full |
Set queries, marketplace and pages in Keywords and marketplace.
Marketplaces: com, co.uk, de, fr, it, es, ca, com.au, co.jp, in, com.br, com.mx, nl,
sg, ae, sa, pl, se, com.tr, eg, com.be.
One keyword and one page answers straight away. Two or more run as a background job, so the template has an
If node and a Wait node that pick the rows up with get_results. If a long list is not finished in
time, raise the wait.
One answer carries one page of rows. If Get job results comes back with truncated: true and a nextPage,
there are more rows waiting. The template saves the first page, which is plenty for a handful of keywords. For a
long list, send that nextPage value back into Get job results as page and keep going until truncated
is false.
4. Google rank tracker
Download: 04-google-serp-rank-tracker.json
Every morning, searches Google for each keyword, looks for your domain in the results, writes the position you
hold - or not in top results - and tells you in Slack when a keyword slips or falls out altogether.
| Trigger | Daily, 06:00 |
| Columns | Date, Keyword, Country, Position, URL, Page title |
| Cost | 10 credits per keyword = €0.0015 per keyword per day |
| Key | Full |
| Also needs | Slack, for the alerts and the digest in seo-alerts |
Set domain, keywords, country and language in Keywords and domain.
google_search with type web takes one keyword per call, so the template loops over your list one keyword at
a time with a Loop Over Items node. Ten keywords a day costs €0.015.
The domain match ignores www., so scrapewise.ai matches https://www.scrapewise.ai/pricing.
Three Slack messages come out of it, and they answer different questions:
| Node | Fires when | Why it is separate |
|---|---|---|
| Ranking warning | A keyword ranks worse than alert_below | A slip inside the results is worth a look, not a panic |
| Rank alert | A keyword is not in the results at all | A drop-out is the serious one, so it reads differently |
| Daily ranking digest | Once per run, after the sheet is written | The whole picture in one message, whether or not anything slipped |
The two per-keyword messages are exclusive, so a keyword produces one of them or neither - never both.
alert_below ships as 20, in Keywords and domain. It is the position you stop caring about: 20 means
you are told when a keyword falls past 20. Lower it to 5 to hear about smaller slips, or raise it past the
results you ever see to silence Ranking warning entirely. It does not affect Rank alert - a drop-out is
always reported - and the digest arrives either way.
The digest reads the rows back out of the sheet rather than the search answers, so it reports what was actually saved. It only counts rows carrying today’s date, so a sheet holding months of history still produces a one-day summary.
5. Google review watcher
Download: 05-google-maps-reviews-monitor.json
Every morning, reads the reviews of the places you list, saves them all to a sheet, and sends a Slack message for every review at or below your star threshold.
| Trigger | Daily, 09:00 |
| Columns | Date, Place, Stars, Author, Review, Posted, Review id, Needs attention |
| Cost | From €0.00015 per place read. The first step answers with estimatedMicroCents - what that run will cost. 1,000,000 micro-cents = €0.01 |
| Key | Full |
| Also needs | Slack, for the low-star alerts in reviews |
Create an empty group of its own in the portal for this workflow and put its id in Places to watch. The read step returns everything in the group, so a shared group would mix other data in.
Place URLs need the place’s data_id, and the link you copy out of the Google Maps address bar does not carry
one. Run template 1 (or the find_local_businesses tool) for the business - every result has a data_id that
looks like 0x4692935f7b0b17f5:0xb136062b9dd26adb. Put it in a link of this shape, one per place:
https://www.google.com/maps/place/?data_id=0x4692935f7b0b17f5:0xb136062b9dd26adb
Each run writes today’s reviews again, so a review appears once per run with that day’s date. Sort or pivot the sheet on Review id to see each review once.
Set alertAtOrBelowStars to the threshold you want - 3 means three stars and below get a Slack message.
force is on, so you get fresh reviews every day and every place is read and charged each run.
If the sheet comes out empty, raise the wait in Give it two minutes - a long list takes longer.
6. YouTube keyword watch
Download: 06-youtube-keyword-watch.json
Every Monday, searches YouTube for each of your keywords, saves what comes up, and posts a Slack message for each video published in the last week. Run it weekly and the sheet shows which videos are gaining on your topics, and which of them are yours.
| Trigger | Weekly, Monday 09:00 |
| Columns | Date, Title, Channel, Views, Length, Published, Link, Mine |
| Cost | From €0.00015 per search read. The first step answers with estimatedMicroCents |
| Key | Full |
| Also needs | Slack, for the new-video alerts in youtube-alerts |
Create an empty group of its own in the portal and put its id in Keywords to watch, same as template 5.
Put your keywords in plain words - the workflow turns each one into a YouTube search link itself. Add your own
channel name as myChannel and the Mine column flags your videos.
The whole result set goes to the sheet; only the fresh part is worth interrupting you for, so Published this week? keeps the videos published less than eight days ago and New video alert posts each one with its channel, views, length and link. Everything older is already in the sheet and no message is sent.
Two things to know about that filter. It reads YouTube’s own published date, which arrives as wording like
3 days ago rather than a date, so the age is derived from that wording and a phrasing it cannot parse is
treated as old rather than new. And because the schedule and the window are both about a week, a video posted
a few hours before one Monday can still be inside the window on the next - expect the occasional repeat rather
than a missed video.
The alert covers every channel, including yours. If you only want other people’s, add a condition on isMine
being false alongside the one already in Published this week?.
Templates 5 and 6 both send their list under a name. If you add or remove a place or a keyword later, change
that name too - Scrapewise refuses a different list sent under a name it already knows.
How the templates are put together
Useful if you want to change one, or copy the pattern into a workflow of your own.
| Piece | What it does |
|---|---|
MCP Client Tool node, HTTP Streamable, Bearer Auth | Calls one named Scrapewise tool. No AI model involved |
| JSON input, not fields | The arguments are written as JSON so you can see exactly what is sent |
| A Code node after every call | Parses the answer and unwraps scraped text before it reaches the sheet |
| The sheet written before any Slack node | The data is saved whether or not an alert goes out, so deleting a Slack node loses nothing |
| An If node in front of the per-item alerts (4, 5, 6) | Decides which single row is worth a message. The digests in 1, 2 and 4 need no condition - they summarise the run and go out every time |
| A sticky note on every canvas | Setup steps and the cost, inside n8n |
Three details the Code nodes handle for you:
- The answer arrives in one of two shapes. Already parsed in
structuredContent, or as a string incontent[0].text, depending on your n8n version. Every Code node reads both. - Scraped strings are wrapped.
{ "type": "scraped", "content": "…", "origin": "…" }marks text a stranger wrote on a web page. The Code nodes unwrap it to a plain string. Never let a later AI step treat it as an instruction - see MCP safety. - Reading a group’s rows returns a page. The rows are under
content, notrows.
All six templates point at https://mcp.scrapewise.ai/mcp. Template 2 only reads rows you already collected, so
a Read key is enough for it; the other five scrape and need a Full key.
Five of the six also post to Slack, so they need a Slack OAuth credential on top of the Scrapewise one. Only template 3 runs without it.
Good to know
- Check the price first. Templates 1 and 3 have a
quote_onlysetting: turn it on and the call returns the price and your wallet balance without scraping. Templates 5 and 6 answer withestimatedMicroCentsbefore the run starts. - Start with one. One keyword, one place, one product. The cost per run is then obvious and the schedule can be turned on afterwards.
- A retry does not charge twice. Add the same
idempotency_keyinsidebodyand identical requests within 24 hours are charged once. - Three jobs at a time. An account can have three background jobs running. A fourth is refused until one finishes.
- Change the schedule freely. Every schedule in these files is a plain n8n Schedule Trigger - open it and set whatever you want, or swap it for a webhook.
Last updated 4 November 2026