anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow with the pieces for collecting local businesses from Google Maps through an Apify Actor: start a run, wait, then read the places. One JSON body sets the place, the kind of business and how many results to collect. Its nodes come unjoined.
Google Maps local business scraper is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Run by hand
The file has no trigger node. You run Google Maps Actor from the editor, with its JSON body set to:
A list of local businesses from Google Maps, one item per place
What you need before you start.
Web scraping
Runs the Google Maps extractor Actor with your search and keeps the places it finds in a dataset you read back.
NeedsApify API token, and credit for the places scraped
Checked by Mindket on 13 Nov 2026
This n8n workflow holds the pieces for collecting local businesses from Google Maps with an Apify Actor. Four nodes do the work, and none is joined to another. The first, Google Maps Actor, starts the Compass Google Maps extractor with a JSON body that names a place, a kind of business and how many results to collect. Then Wait pauses while Apify scrapes, and Get Results reads the places from the Actor’s last run. A fourth node, Sync Run, starts the Actor and waits in one call. The file has no trigger node and no lines, so you run the nodes from the editor or join them yourself.
Freelancers, small agencies and sales teams that build prospect lists of local businesses, and analysts who count competitors by area.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Local marketing | Agency account managers | Scrape one trade in one city, then pitch each business on a better website | An agency pulls dentists in a target city and sends each one an offer. |
| Equipment and supplies | Sales reps | List the contractors in a region before a trip | A supplier lists electricians in its sales area and plans its calls by town. |
| Market research | Analysts | Count businesses of one kind per district and compare their ratings | An analyst counts coffee shops in two districts and compares their scores. |
You need some n8n and a little JSON, plus an Apify account. The nodes arrive unjoined, so you draw the lines. Skip it if you want a finished lead pipeline that ends in a sheet or a CRM: this stops at the raw list. Its author puts setup at about 5 minutes.
Any n8n you run will do, as long as it can reach Apify, because the workflow does nothing beyond sending web requests and reading what comes back.
Get Results to save the placesGoogle Maps Actor for a regular scrapeGet it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Have these ready before you import it.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| Apify | An account and its API token |
| Apify credit | The Actor is paid per place scraped. Its Apify page, read on 2 November 2026, gives a base price from $1.50 per 1,000 places |
workflow.json.Google Maps Actor, Get Results and Sync Run, replace <YOUR_APIFY_TOKEN> in the address with your token.Google Maps Actor, and copy it into Sync Run if you use that route.Google Maps Actor to Wait to Get Results, and add a trigger in front if the chain should start by itself.Wait and set its unit and amount to the length of your scrape.The body in Google Maps Actor is this:
{
"language": "en",
"locationQuery": "New York, USA",
"maxCrawledPlacesPerSearch": 50,
"searchStringsArray": ["plumbers"],
"skipClosedPlaces": false
}Wait stores only its amount, 25, and n8n’s default unit is seconds, so it pauses 25 seconds. A large scrape needs longer: set minutes there.
Run Google Maps Actor once. Apify answers at once with the run’s details and keeps scraping. When the run has finished, Get Results returns the places as items, one per business, which you can save to a sheet, filter by rating or pass to another workflow. In a chain started by a trigger, Wait is what gives Apify time to finish.
| To change | Where |
|---|---|
| Place | locationQuery, free text such as a city, a state or a country |
| Kind of business | searchStringsArray, one or more search terms, typed as you would into Google Maps |
| Number of places | maxCrawledPlacesPerSearch, the most results for each term. Leave it out and the Actor collects every place it finds |
| Closed places | skipClosedPlaces, set to true to leave them out |
| Language | language, the language of the results |
This body in Google Maps Actor:
{
"language": "en",
"locationQuery": "Austin, USA",
"maxCrawledPlacesPerSearch": 20,
"searchStringsArray": ["yoga studios"],
"skipClosedPlaces": true
}Get Results returns up to twenty items, one per studio. On the Actor’s Apify page, read on 2 November 2026, each place carries fields such as title, phone, website, totalScore and reviewsCount, and an address.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. An Apify Actor is a ready-made scraper that you start through a web address. Starting it takes a moment. Scraping takes longer, which is why Wait sits between starting the run and reading it. Run one node at a time from the editor, and each shows what it received and what it sent.
For experts. Three calls reach three Apify endpoints, and one is easy to misread. Apify’s documentation, read on 2 November 2026, says run-sync returns the run’s OUTPUT record, which an Actor need not store, and times out after 300 seconds.
| Node | Call | What to know |
|---|---|---|
Google Maps Actor | POST to runs | Starts the run and returns its details, including the dataset it writes to |
Get Results | GET on runs/last/dataset/items | Reads the Actor’s last run, so a run started in between replaces the one you meant. The dataset ID from the start call pins it |
Sync Run | POST to run-sync | Returns the OUTPUT record, not the places. Apify’s run-sync-get-dataset-items returns the places in one call |
Each scrape costs money, and the token sits in plain view in the file’s addresses.
maxCrawledPlacesPerSearch costs moreAn n8n workflow with the pieces for collecting local businesses from Google Maps through an Apify Actor. One JSON body
names the place, the kind of business and how many results to collect.
workflow.json: the workflow as n8n exports it, eight nodes. It holds no credential, and the Apify token that sat inREADME.md: these notes.The file has no trigger node and no lines between its nodes. Run each node from the editor, or join them as shown
below.
workflow.json.Google Maps Actor, Get Results and Sync Run, replace <YOUR_APIFY_TOKEN> in the address with your token.Google Maps Actor and set your search (below). Copy the same body into Sync Run if you use it.Google Maps Actor to Wait to Get Results. Add a Manual Trigger or a Schedule Trigger beforeGoogle Maps Actor if you want the chain to start on its own.Wait and set its unit and amount to the length of your scrape. The file stores only the amount, 25, so theGet Results returns one item per business.The body in Google Maps Actor and Sync Run:
{
"language": "en",
"locationQuery": "New York, USA",
"maxCrawledPlacesPerSearch": 50,
"searchStringsArray": ["plumbers"],
"skipClosedPlaces": false
}
| Node | Request | What to know |
|---|---|---|
| Google Maps Actor | POST to the Actor's runs address | Starts the run and answers at once with the run's details. The scraping goes on in Apify. |
| Get Results | GET on runs/last/dataset/items | Reads the places from the Actor's last run. Start another run before you read, and you read that run's places instead. For a fixed run, use the dataset ID in the start call's answer. |
| Sync Run | POST to run-sync | Starts the Actor and waits, but Apify's documentation, read on 2 November 2026, says it returns the run's OUTPUT record and not the dataset, and times out after 300 seconds. For the places in one call, Apify offers run-sync-get-dataset-items. |
locationQuery takes free text, such as a city, a state or a country.searchStringsArray takes one or more search terms, as you would type them into Google Maps.maxCrawledPlacesPerSearch is the most results for each term. Leave it out and the Actor collects everyskipClosedPlaces set to true leaves out places Google Maps marks as closed.language sets the language of the results.maxCrawledPlacesPerSearch costs more.Authorization as the name and Bearer followed by the token as the value,?token=<YOUR_APIFY_TOKEN> out of the three addresses.README.md 4 KB workflow.json 4 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
nerijs · Kit
A pixel art style add-on for Stable Diffusion XL that turns text prompts into pixel-style images, with an optional LCM LoRA for faster runs. For game makers, d…
LiconStudio · Kit
Keeps characters, clothing, objects and backgrounds consistent in generated video by feeding the model up to five reference images. A LoRA for LTX-2.5 in Comfy…