Systems Lab

Agent skill

scrapercity-integrations

Connects ScraperCity to Clay (HTTP API column), n8n (HTTP Request node and Webhook trigger), Zapier (Webhooks by Zapier), Make, Pipedream, Google Sheets, Airtable, HubSpot, Salesforce, Attio, Pipedrive, GoHighLevel, Instantly, Smartlead, Lemlist, EmailBison and ManyReach, including enrichment waterfalls ordered by cost per found record, real-time form enrichment and job-change tracking by Lead Database re-pulls.

activeNeeds a keyActs undeclared3,251 words

Filed under CRM and RevOps and Outbound email.

From scrapercity/gtm-skills · 31 skill entries · 0 · pushed 2026-11-02

What it does when it runs

Connects ScraperCity to Clay (HTTP API column), n8n (HTTP Request node and Webhook trigger), Zapier (Webhooks by Zapier), Make, Pipedream, Google Sheets, Airtable, HubSpot, Salesforce, Attio, Pipedrive, GoHighLevel, Instantly, Smartlead, Lemlist, EmailBison and ManyReach, including enrichment waterfalls ordered by cost per found record, real-time form enrichment and job-change tracking by Lead Database re-pulls. Produces an integration plan with the data flow, where each key goes, a field mapping, vendor rate limits with sources, dedupe rules and a cost table. Use when the user wants ScraperCity leads loaded into a CRM, a sheet or a cold email tool automatically, asks how to call ScraperCity from Clay, n8n, Zapier or Make, wants a webhook to fire a workflow when a run finishes, asks for a Clay or n8n waterfall, wants champion or job-change alerts, or asks for the field mapping into a specific tool.

Automated analysis of the skill and the 12 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
  • SCRAPERCITY_API_KEY
Hosts it reaches
  • airtable.com
  • api.airtable.com
  • api.attio.com
  • api.instantly.ai
  • api.lemlist.com
  • api.manyreach.com
  • api.smartlead.ai
  • app.manyreach.com
  • app.scrapercity.com
  • apps.make.com
  • aws.amazon.com
  • cheatsheetseries.owasp.org
  • dedi.emailbison.com
  • developer.instantly.ai
  • developer.lemlist.com
  • developer.salesforce.com
  • developers.google.com
  • developers.hubspot.com
  • developers.pipedrive.com
  • docs.attio.com
  • docs.emailbison.com
  • docs.n8n.io
  • help.gohighlevel.com
  • help.make.com
  • help.manyreach.com
  • help.zapier.com
  • helpcenter.smartlead.ai
  • knowledge.hubspot.com
  • marketplace.gohighlevel.com
  • pipedream.com
  • pipedrive.readme.io
  • scrapercity.com
  • server.smartlead.ai
  • services.leadconnectorhq.com
  • support.airtable.com
  • university.clay.com
  • www.bls.gov
  • www.crexi.com
  • www.itu.int
  • www.linkedin.com
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
network

Ask about scrapercity-integrations

Opens your assistant with this page's recorded context. Check the linked sources before relying on it.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/scrapercity/gtm-skills.git /tmp/gtm-skills
git -C /tmp/gtm-skills sparse-checkout set "skills/scrapercity/scrapercity-integrations"
mkdir -p ~/.claude/skills/scrapercity-integrations
cp -R "/tmp/gtm-skills/skills/scrapercity/scrapercity-integrations/." ~/.claude/skills/scrapercity-integrations/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 31 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add scrapercity/gtm-skills
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Before you install: this skill will not complete its job on a bare agent. It needs SCRAPERCITY_API_KEY, which you have to obtain separately.

Reproduced in full from scrapercity/gtm-skills/blob/46d446143690c8048b17817aecf36990ea6880e5/skills/scrapercity/scrapercity-integrations/SKILL.md, which is licensed MIT (skill frontmatter). 3,251 words, 25 headings.

ScraperCity Integrations

Overview

This skill wires ScraperCity into the tools a team already runs: an enrichment table, an automation platform, a CRM, a sheet, a cold email sender. The deliverable is an integration plan: each step of the flow, where each key is stored, which ScraperCity field maps to which destination field, the rate each hop is paced at against the vendor's published limit, and what it costs per month.

Every third-party mechanism here was checked in that vendor's own documentation on 2026-10-13. The ScraperCity side follows the scrapercity npm package and references/scrapercity-catalog.md.

The mistakes it prevents:

  • A Clay column that starts one find_emails run per row: 2,000 rows, 2,000 runs, past the 10 concurrent and 100 a minute limits.
  • A ScraperCity key pasted into a Zap name, a sheet cell or a URL.
  • Retry On Fail turned on for a POST that starts a paid run.
  • Unvalidated addresses loaded straight into Instantly or Smartlead.
  • A 2,000-record backfill into Airtable at 100 records a call (Airtable takes 10).
  • A webhook flow that imports every run on the account, including runs another automation started.

When to Use

  • "Send new leads from ScraperCity into HubSpot every morning."
  • "How do I call the Lead Database from a Clay column?"
  • "Set up n8n to pull local businesses and push them to Smartlead."
  • "When my Apollo run finishes, add the leads to an Instantly campaign."
  • "Put ScraperCity results in a Google Sheet on a schedule."
  • "What fields map to GoHighLevel?"
  • "Zapier keeps returning 429."
  • "Build me a Clay waterfall that tries the database first and only pays when it has to."
  • "Alert the account owner when one of our champions changes jobs."
  • "Enrich and route our demo-request form fills by company size."
  • "Load the new leads into Salesforce without creating duplicates."
  • "Re-check the emails in our CRM before next month's sequences."

Use a different skill for nearby jobs:

JobSkill
Raw endpoints, request bodies, retry code in Python or Nodescrapercity-api
Running ScraperCity from an AI agentscrapercity-mcp
Shell scripts and cron with npx scrapercityscrapercity-cli
Which database filters to sendscrapercity-lead-database, scrapercity-local-business-database
Validating the list before a senderemail-list-cleaner
Choosing and setting up a sendersending-platforms
Enriching records already in a CRMcrm-enricher

Prerequisites

  • A ScraperCity API key from app.scrapercity.com/dashboard/api-docs, created for this automation only.
  • The plan: database feeds need Growth ($149/mo) or Scale ($649/mo). Scrapers and enrichment work on every plan.
  • The automation platform and its plan. Webhooks by Zapier and Catch Hook need Zapier Professional or higher.
  • Destination credentials with the narrowest scope that works (HubSpot crm.objects.contacts.write, GoHighLevel contacts.write, Instantly leads:create).
  • Volume, cadence and the destination's own plan limits (Airtable monthly API calls, Pipedrive daily token budget).

Authoritative Foundations

SourceWhat it contributes
scrapercity npm package 1.0.17, scrapercity.com/api-docs and /how-to-useBearer auth, 100 requests a minute per key, 10 concurrent scrapes, 48-hour result storage, database feeds with excludeDelivered and after, webhook on SUCCEEDED or FAILED with runId, fileName, leadsCount, duplicate windows
scrapercity.com/integrationsThe supported integration list, the Lead Database person keys in the n8n guide, validator CSV columns, the ManyReach v2 bulk details
Clay UniversityHTTP API column, encrypted header accounts, request limit and duration, conditional runs, webhook sources capped at 50,000 submissions
n8n docsHeader Auth credential, cursor pagination with $pageCount and $response, Batching, Retry On Fail, Webhook node URLs and response modes, Extract From File
Zapier helpCustom Request, Catch Hook, Professional plan requirement, 20,000 webhook requests per 5 minutes per user, Code steps returning arrays
Make docsMake a request with keychain credentials, Parse CSV, Custom webhook at 300 requests per 10 s, 410 after 5 idle days
Pipedream docsSecret environment variables, HTTP trigger and $.respond, timeouts of 30 s or 60 s by default and up to 750 s
Google Apps Script docsUrlFetchApp headers and payloads, 2KB URL cap, 6-minute runs, daily fetch quotas, Script properties
Airtable, HubSpot, Pipedrive, HighLevel API docsBatch sizes (10, 100, 1, 1), upsert keys, auth headers, burst and daily limits
Instantly, Smartlead, Lemlist, EmailBison, ManyReach docsBulk sizes (1,000, 400, 1, CSV up to 50,000, 100), auth methods, skip and dedupe flags, rate limits where published
RFC 6750Bearer tokens in the header, never in a URL

Routing and detail: references/framework-notes.md.

Workflow

1. Pin down the flow

Write it as source, transform, destination, trigger: "Local Business Database, validate, Smartlead plus GoHighLevel, weekdays 07:00". Confirm the plan with GET /api/v1/wallet (plan.name, wallet.total_balance_dollars).

2. Pick the platform

SituationPlatform
Enriching rows already in a Clay table, one sync lookup per rowClay HTTP API column
A waterfall across several sources (database, finders, providers the team already has)Clay columns or n8n, per references/waterfall-recipes.md
Real-time form fills routed by company sizen8n Webhook plus a Lead Database lookup by domain
Monthly champion and stakeholder checksn8n schedule or a Clay table, per references/job-change-tracking.md
Monthly re-validation of CRM emails due for a sendn8n schedule, per references/automation-recipes.md
Daily feeds, scraper runs finished by webhook, several destinationsn8n or Make
The team already lives in Zapier, under a few thousand records a dayZapier with the hourly excludeDelivered pattern
Code with retries and pagination, no server to runPipedream
A sheet the team works from, under a few thousand rows a dayGoogle Apps Script in the sheet
Over 10,000 records a day, or strict retry controlCustom code from the scrapercity-api skill

3. Separate sync from async

Database, wallet, runs and status calls return data and fit per-row steps. Every scraper returns only a runId. For scrapers, batch the inputs into one run (one validate_emails run with 2,000 addresses, one find_emails run with 500 contacts), then finish the flow on the ScraperCity webhook. Never put /api/v1/scrape/* in a per-row step.

4. Store the keys

PlatformScraperCity key location
ClayHTTP API (Headers) account: Authorization = Bearer plus key
n8nHeader Auth credential: Name Authorization, Value Bearer plus key
ZapierCustom Request Headers: Authorization = Bearer plus key
MakeMake a request, Authentication type API key, keychain with header Authorization
PipedreamEnvironment variable SCRAPERCITY_API_KEY, Secret
Google SheetsApps Script Script properties SCRAPERCITY_API_KEY
Your own codeEnvironment variable or secret manager

Destination keys go in the same store. Smartlead and the ManyReach help-center endpoint take their key in the URL; turn off saving successful executions or full-URL logging for those steps.

5. Map the fields

Pull one record (limit=1) or run a 3-row test and map from the keys you see. Transforms that apply everywhere: one email per record, lowercase; validate before any sender; domain from website; phone to E.164; a segment tag and a source tag on every record. Full tables for every destination: references/field-mapping.md.

6. Set the pace for each hop

HopPublished limitPace at
ScraperCity API100 a minute per key, 10 concurrent scrapes1 call a second; one webhook-driven download per run
HubSpot batch upsert100 or 190 per 10 s by tier, 100 records per batch1 batch a second
Salesforce sObject Collections upsert200 records per request; org-wide daily request allocation1 request a second; check the org's remaining allocation first
Pipedrive persons20 to 120 per 2 s by plan, daily token budgetHalf the burst limit; dedupe before loading instead of searching
GoHighLevel upsert100 per 10 s, 200,000 a day5 a second
Instantly bulk add100 a second, 6,000 a minute per workspace, 1,000 leads per callBatches of 100 to 1,000 with a 2 s pause
Smartlead add leads10 per 2 s, 400 leads per call1 call every 2 s
Lemlist create lead20 per 2 s per key, 1 lead per call8 a second
Airtable5 per second per base, 10 records per call4 a second
EmailBisonNot published2 a second, or the CSV upload
ManyReachNot published in ManyReach help; 60 a minute per the ScraperCity guide1 call a second, 100 prospects per call

7. Make it idempotent

  • Across pulls: excludeDelivered=true plus the after cursor. Each call differs, so the 30-second duplicate window never trips.
  • Across notifications: store the runIds this flow started and the ones it finished. ScraperCity notifies for every run on the account.
  • In the destination: upsert where the API offers it (HubSpot by email, GoHighLevel by the duplicate setting, Airtable performUpsert), skip flags where it does not (Instantly skip_if_in_workspace, Lemlist deduplicate).
  • One direction: ScraperCity results flow into the CRM. A two-way sync between an enrichment table and the CRM lets old CRM values overwrite fresh results on the next sync. Write status and source fields every time, contact fields only when empty, and never owner, stage or deal fields.

8. Estimate cost, then test small

Price every ScraperCity step from references/scrapercity-catalog.md. Show the monthly total and get a yes before scheduling any paid step. Run a 5-record pull and a 50-email validator run ($0.08) through every step, then check 20 records in each destination UI.

9. Write the plan

Fill templates/output-template.md and run python3 scripts/check-output.py plan.md.

ScraperCity Implementation

The calls integrations make

PurposeCall
Plan and balanceGET https://app.scrapercity.com/api/v1/wallet
Daily people feedGET /api/v1/database/leads?...&excludeDelivered=true&limit=100&after=0
Daily local business feedGET /api/v1/database/local-businesses?...&excludeDelivered=true&limit=100&after=0
Long filters (Apps Script URLs over 2KB, saved search URLs)POST the same parameters as JSON to the same path
Batch validationPOST /api/v1/scrape/email-validator with {"emails": [...]}
Batch email findingPOST /api/v1/scrape/email-finder with {"contacts": [{"first_name", "last_name", "domain"}]}
Run status after a webhookGET /api/v1/scrape/status/{runId}
ResultsGET /api/downloads/{runId} (CSV, within 48 hours)
Missed-notification sweepGET /api/v1/runs?hours=48&limit=100

Webhook: register the receiving URL (n8n production Webhook URL, Zapier Catch Hook, Make Custom webhook, Pipedream HTTP trigger) at app.scrapercity.com/dashboard/webhooks. The POST carries runId, fileName and leadsCount. Confirm with the status call before downloading.

n8n cursor pagination

HTTP Request > Options > Pagination
  Pagination Mode: Update a Parameter in Each Request
  Type: Query
  Name: after
  Value: {{ $pageCount === 0 ? "0" : $response.body.pagination.next_after }}
  Stop when $response.body.pagination.next_after is empty; cap pages at daily volume / 100

Clay lookup column

Method: GET
Endpoint: https://app.scrapercity.com/api/v1/database/leads
Query: companyDomain = Domain column, title = "VP Sales, Head of Sales", hasEmail = true, limit = 3
Header account: ScraperCity (Authorization: Bearer + key)
Rate limit: Request limit 1, Duration 1000 ms
Run condition: Domain is not empty

ScraperCity's own Clay guide shows 10 requests per 1,000 ms. That is 600 a minute against the documented 100 a minute per key, so this skill sets 1 per 1,000 ms.

Worked cost estimate

A home-services agency: 300 new Texas HVAC contractors rated 4 stars and up each weekday from the Local Business Database, into GoHighLevel, and the ones with a valid email into Smartlead, run by n8n.

LineUnitsUnit priceCost
Local Business Database rows, 22 x 3006,600included in Growth$0.00
validate_emails, one email per business6,600$0.00169$11.15
Test batch50$0.00169$0.08
First month$11.23

The same 6,600 businesses scraped fresh with scrape_maps would add 6,600 x $0.0099 = $65.34 and come without rating filters or excludeDelivered. Requests: about 5 a minute at peak against 100. GoHighLevel: 300 upserts at 5 a second, one minute a day. Smartlead: one call a day with about 240 valid leads (400 is the cap).

Output Format

An integration plan in Markdown from templates/output-template.md:

  1. Request Summary: goal, platform, destinations, plan and balance, volume.
  2. Data Flow: numbered steps with tool, action and trigger.
  3. Connection Setup: each credential, where it goes, which secret store. No key values.
  4. Field Mapping: ScraperCity field, destination, destination field, transform.
  5. Schedule and Triggers: pull schedule, run-finished signal, backstop, time zone.
  6. Rate Guardrails: vendor limit, planned rate, batch size, source link per hop.
  7. Cost Estimate: catalog prices and a monthly total.
  8. Dedupe and Idempotency, Test Run, Next Steps.

Check it with python3 scripts/check-output.py plan.md.

A one-hop question (the Clay column settings, a field name in one destination, a vendor's batch size) gets that answer in a few lines; the full plan is for flows that will run on a schedule or a trigger.

  • Each fact once; every call and script written out in full (no "..." values, no loop described in a comment); no counts or results marked assumed. If nothing has run, say so once at the top.
  • What the reader receives is the deliverable only: no internal file paths, reference section numbers or runbook IDs; another skill is named only in a handoff line that tells the user what to run next; no tables of checks that were not run (one "Not checked:" line instead); and no repeated identical rows where one template plus a list will do.

Quality Check

  • The ScraperCity key sits in an Authorization: Bearer header from a credential store, never a URL, a sheet cell or a step name.
  • No scraper endpoint is called per row; scrapers run in batches and finish on the webhook.
  • Retry is enabled only on GET steps; POST starts never retry blind.
  • Every hop's planned rate and batch size is at or under the vendor's published limit, with the source linked.
  • The webhook flow checks runId against runs it started and confirms SUCCEEDED before downloading.
  • Emails are validated before any sender load; senders do not re-verify what ScraperCity already validated unless the user asks.
  • Database feeds use excludeDelivered=true with after; nothing pairs excludeDelivered with page above 1.
  • The cost table uses catalog prices and was approved before any paid step ran.
  • A 5-record and 50-email test ran end to end, and 20 records were checked in each destination.
  • A waterfall plan lists its steps by cost per found record, states the per-row ceiling, and writes misses as not found.
  • A job-change flow confirms each candidate before routing and never enrolls a mover into a sequence automatically.

Common Pitfalls

MistakeWhy it failsFix
Per-row scraper calls in Clay or ZapierOne run per row; hits 10 concurrent and 100 a minute, and each row gets only a runIdBatch into one run, finish on the webhook, write back through a Clay webhook source or the CRM API
Clay at 10 requests a second600 a minute against 100 a minute per keyRequest limit 1, Duration 1,000 ms
Retry On Fail on a scrape POSTA retried start can buy the run againRetry GETs only; on a POST error check /api/v1/runs
Fixed page=1 every few secondsIdentical requests within 30 s return 429after cursor, or space identical calls over 30 s apart (hourly in Zapier)
Importing every webhookThe notification fires for every run on the accountMatch runId against a table of runs this flow started
Trusting the webhook bodyNo signature is documentedConfirm with GET /api/v1/scrape/status/{runId}
Downloading days laterResults are stored for 48 hoursDownload on the webhook; hourly sweep for misses
Apps Script GET with long filtersApps Script caps fetch URLs at 2KBPOST the parameters as JSON
Airtable batches of 100Airtable takes 10 records per request10 per call at 4 calls a second
GoHighLevel tags on existing contactstags overwrites every tag on the contactUse the Add Tag endpoint for existing contacts
Pipedrive job_title without contact syncThe request fails with 403Use a custom field
personal_email into a cold campaignPersonal inboxes draw more spam complaints, which pulls inbox placement down for every send on the domainMap only the work email
A waterfall that pays per lookup before the free database stepPays for rows the database already coversDatabase first, then pay-on-find tools, then per-lookup providers ordered by cost per found
Auto-enrolling job-change candidates into a sequenceThe database's refresh timing is not published, so some candidates have not movedConfirm on the public profile; a person writes the first note
Using an old guide's pathSome guides show scraper paths as GET or under other namesUse the paths in references/scrapercity-catalog.md

Execution Artifacts

FileUse it when
references/framework-notes.mdYou need the source behind a rule, or which file to open.
references/automation-recipes.mdSetting up Clay, n8n (importable workflow JSON included), Zapier, Make, Pipedream, Google Sheets (tested Apps Script included), Airtable, real-time form enrichment, or monthly CRM email re-validation.
references/crm-and-sender-recipes.mdLoading into HubSpot, Salesforce, Attio, Pipedrive, GoHighLevel, Instantly, Smartlead, Lemlist, EmailBison or ManyReach.
references/field-mapping.mdMapping ScraperCity fields to any destination, and the transforms.
references/waterfall-recipes.mdOrdering sources by cost per found record, the per-row ceiling, the validation gate, the Clay column layout with its formulas, and the n8n version.
references/job-change-tracking.mdChampion and stakeholder re-pulls by socialUrl: watch list, cadence, classification, routing, a sample note to a mover, metrics, in n8n or a Clay table.
templates/output-template.mdStart every integration plan here.
examples/worked-example.mdA complete n8n plan: Texas HVAC contractors into GoHighLevel and Smartlead.
scripts/check-output.pyRun on the finished plan before handing it over.
references/scrapercity-catalog.mdTool ids, endpoints and prices.
references/scrapercity-platform.mdPlans, database allowances, the supported integrations list.
references/scrapercity-agent-patterns.mdWallet checks, cost formula, webhook handling, key rules.

Related Skills

  • scrapercity-api: endpoints, bodies, retry logic and tested clients behind every recipe here.
  • scrapercity-mcp and scrapercity-cli: the agent and terminal access paths.
  • scrapercity-lead-database and scrapercity-local-business-database: what to put in the query.
  • email-list-cleaner and cold-email-list: the validated, send-ready file.
  • sending-platforms: picking and configuring the sender.
  • crm-enricher: filling gaps in records already in a CRM.
  • using-scrapercity-skills: router.

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Need help setting it up?

This page tells you what scrapercity-integrations does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.

Build my GTM engine

Tell us what you want to improve. Fedor reviews the workflow and replies by email when there is a useful fit.

Fedor reviews every request personally. If there is a useful fit, he will reply by email.