Nanosaur2-670M
well9472 · Kit
Makes illustrations from text prompts with a small 670M-parameter diffusion model, run through ComfyUI. Built as a low-budget research model for people who wan…
An n8n sub-workflow that another workflow calls with job titles, places and keywords. It builds an Apollo people search address, has an Apify Actor read the contacts and saves them to Google Sheets. The Actor in the file is gone, so you pick one.
Apollo contact scraper sub-workflow for Google Sheets 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.
Called by another workflow
It starts when another workflow calls it and passes a query, a list whose first item holds:
A sheet of contacts from an Apollo search, and a one-line count for the workflow that asked
What you need before you start.
Contact scraping
Runs an Actor that reads the contacts behind the Apollo search address. The one in the file no longer answers, so you pick another.
NeedsApify API token, in a query parameter, and an Actor that reads Apollo searches
Contact sheet
Writes each contact to the Leads tab, matching its columns to the field names.
NeedsA Google account to sign in with, and a sheet with eleven headers
Checked by Mindket on 13 Nov 2026
This n8n sub-workflow saves contacts from an Apollo people search to Google Sheets, and another workflow starts it. The caller sends job titles, places and business keywords. A Code node turns them into an Apollo search address, an Apify Actor reads the contacts from it, and the sheet gets one row for each contact. The caller hears back how many were saved. Eight nodes run in a straight line.
n8n builders who already run a lead agent or a chat bot and want it to fill a sheet from an Apollo search. The Actor in the file no longer exists. You have to be at ease choosing another one on Apify, so skip it if you want a tool that works the moment you import it.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Agencies | Builders of lead agents | Give an AI agent this workflow as a tool | A chat agent turns a request for marketing managers at Sydney software firms into a query and fills the sheet. |
| B2B sales | Sales operations staff | Call it from a weekly schedule with a fixed query | A sales ops lead refreshes a list of IT directors in Texas every Monday. |
| Recruiting | Agency recruiters | Call it with a title and a place taken from a form | A recruiter asks for nurse managers in Dublin and gets a sheet of contacts. |
Inside your own n8n and behind another workflow, since it has no trigger that a person can press and runs only when a workflow calls it.
queryquery refreshes a listGet it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Its author puts setup at about 10 minutes, a figure from before the Actor had to be replaced. Expect longer.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or a server of your own, and a workflow that calls this one |
| Apify | An account and its API token, with credit, and an Actor that reads an Apollo people search address |
| An account that can edit the sheet, for a Google Sheets OAuth2 credential | |
| A sheet | A tab named Leads with eleven headers that match the fields of Extract Info |
workflow.json./d/ and /edit.Extract Info, delete the space at the end of the seniority field’s name.Google Sheets stores scraped data. Replace YOUR_SHEET_ID there and pick emailAddress as the column to match on.Apollo Scraper, put the ID of the Actor you chose in the address and the body it asks for, then replace <YOUR_APIFY_TOKEN> in the query parameters.query.On 2 November 2026 Apify answered 404 Not Found for the Actor in the file, code_crafter~apollo-scraper, and its store address showed Apollo scraper alternatives. That is why step 5 asks for a new one.
Send it one search at a time. The caller passes a query field, a list whose first item holds job_title, location and business, each a list of terms. A plus sign inside a term stands for a space.
{
"query": [
{
"job_title": ["marketing+manager"],
"location": ["sydney+australia"],
"business": ["software"]
}
]
}It answers with one item. Its output says how many contacts went into the sheet.
| To change | Where |
|---|---|
| Who is searched | The query the calling workflow sends |
| How many contacts | totalRecords in the body of Apollo Scraper, 500 in the file |
| Personal or work emails | getPersonalEmails and getWorkEmails in the same body, if your Actor takes them |
| What is saved | The fields in Extract Info and the headers of your sheet |
An agent sends the query above, and Create URL builds this address:
https://app.apollo.io/#/people?sortByField=recommendations_score&sortAscending=false&page=1&personTitles[]=marketing%20manager&personLocations[]=sydney%20australia&qOrganizationKeywordTags[]=software&includedOrganizationKeywordFields[]=tags&includedOrganizationKeywordFields[]=name
Each contact the Actor returns becomes a row of eleven fields, such as fullName, emailAddress, jobTitle and companyName, with software in businessIndustry. The agent then gets back a line like this:
37 new contacts have been added to the Google Sheet!
If you are new. A sub-workflow is a workflow that another one starts, the way a function is called, and it hands back a result. This one has no button of its own. To test it, pin a query like the one above as the output of When Executed by Another Workflow, then run it from the editor.
For experts. Four nodes decide whether a run works.
| Node | What it does | What to know |
|---|---|---|
Create URL | Builds the Apollo address | Reads only query[0], and turns plus signs into spaces before it encodes each term |
Apollo Scraper | Calls the Actor and waits | A POST now. Apify ends such a call after 300 seconds, according to its API reference |
Google Sheets stores scraped data | Appends or updates by auto-mapping | Needs a column to match on, and headers spelled as the fields |
Limit | Keeps one item | So the caller receives one line, not one item for each contact |
The original copy’s Create URL code had lost a backslash. Its regex read /+/g, which JavaScript rejects. This one has /\+/g back. The original also had no method on Apollo Scraper, which makes n8n send a GET, so this one sends a POST.
The search depends on a third party’s scraper, and what it brings back is personal data.
Create URL reads only the first item of queryApollo Scraper, so take it out before you share the workflowAn n8n sub-workflow. Another workflow calls it with job titles, places and business keywords. It turns them into an
Apollo people search address, has an Apify Actor read the contacts from that search, and saves each contact to a Google
Sheet. It answers the caller with one line that says how many contacts were saved.
Read "The Actor is gone" below before you build on it: the Actor named in the file no longer answers.
workflow.json: the workflow as n8n exports it, eight nodes and no sticky notes. It holds no credential.README.md: these notes.Apollo Scraper carried an Apify token in its address, beside a placeholder in its query parameters. The token is gone,<YOUR_APIFY_TOKEN>.Apollo Scraper had no method set, so n8n would send a GET, and Apify's API takes an Actor's input only in a POST. ItCreate URL code had lost a backslash: its regex read /+/g, which JavaScript rejects. This one/\+/g back.Google Sheets stores scraped data asks for YOUR_SHEET_ID and finds theLeads.The file calls code_crafter~apollo-scraper. On 2 November 2026 Apify's API answered 404 Not Found for that Actor, and
its store address showed a page of Apollo scraper alternatives instead. Until you replace it, Apollo Scraper fails.
To replace it, pick an Actor on Apify that takes an Apollo people search address. Put its ID in the address ofApollo Scraper, keep run-sync-get-dataset-items at the end, and write the body its input page asks for. The file
sends url, totalRecords of 500, and getPersonalEmails and getWorkEmails set to true. Then run it once and match
the fields in Extract Info to what the new Actor returns.
workflow.json.Leads. Put these headers in row 1, since the sheet node maps fields to columnsfullName, emailAddress, linkedInURL, seniority, jobTitle, companyName, location, country,Number, websiteURL, businessIndustry. In Extract Info, the seniority field's name ends in a space. Delete/d/ and /edit.Google Sheets stores scraped data, select it and replace YOUR_SHEET_IDemailAddress as the column to match on. The file has none set.Apollo Scraper (above). In its query parameters, replace <YOUR_APIFY_TOKEN> with your token.query.When Executed by Another Workflow accepts any input. The next node reads one field, query: a list whose first item
holds three lists. Inside a term, a plus sign stands for a space.
{
"query": [
{
"job_title": ["marketing+manager", "head+of+marketing"],
"location": ["sydney+australia"],
"business": ["software"]
}
]
}
query can also arrive as that list written out as JSON text, the way an AI agent's workflow tool may pass it. The
workflow answers with one item:
{ "output": "37 new contacts have been added to the Google Sheet!" }
JSON puts the incoming query into a field of its own.Create URL builds the search address on https://app.apollo.io/#/people. Job titles become personTitles[],personLocations[] and business keywords qOrganizationKeywordTags[]. It also sorts by Apollo'sApollo Scraper sends that address to the Actor and waits for the contacts.Extract Info keeps eleven fields for each contact. They are the name, the email, the LinkedIn address and theGoogle Sheets stores scraped data writes each contact to the sheet.Edit Fields counts the contacts it wrote, and Limit keeps one item, so the caller gets a single line back.query the calling workflow sends.totalRecords in the body of Apollo Scraper, 500 in the file.getPersonalEmails and getWorkEmails in the same body, if your Actor takes them.Extract Info, and the headers in your sheet.Create URL reads only the first item of query. Send one search for each call.totalRecords if it does.README.md 6 KB workflow.json 10 KB
well9472 · Kit
Makes illustrations from text prompts with a small 670M-parameter diffusion model, run through ComfyUI. Built as a low-budget research model for people who wan…
Waqf-AI · Kit
Reads handwritten Arabic text from images and returns it as text. A fine-tuned PaddleOCR-VL model for people digitizing Arabic handwriting.
Wan-AI · Kit
Makes video clips from a text prompt or an image plus text, at up to 720P and 24 frames per second, in the Diffusers format for a single consumer GPU.
nhathoangfoto · Kit
A LoRA for FLUX.2 Klein 9B that puts a character into the pose shown by a mannequin reference while keeping the character's face and style. For artists and des…
leejet · Kit
Generates images from text on modest GPUs, using quantized Z-Image-Turbo files made for stable-diffusion.cpp. For people who run image models on their own comp…
HiDream-ai · Kit
Generates images from text prompts with a 17B-parameter open model that scores at the top of the card's prompt-following tables. For designers, marketers and d…