Scrapercity Cli — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Scrapercity Cli (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
export SCRAPERCITY_API_KEY="your_key" # get from app.scrapercity.com/dashboard/api-docs
npx scrapercity wallet # verify balanceWriting code instead? Use an SDK with the same tools as the MCP server: npm install scrapercity (import { callTool } from 'scrapercity') or pip install scrapercity (ScraperCity().call_tool(...), plus LangChain and OpenAI Agents tools). Guide: https://scrapercity.com/sdk
Every scraper follows: start → poll → download
POST /api/v1/scrape/{slug} → { runId }
GET /api/v1/scrape/status/{runId} → { status, handled, outputUrl }
GET /api/downloads/{runId} → CSV fileAuth: Authorization: Bearer $SCRAPERCITY_API_KEY on all requests.
<!-- GENERATED:pricing:start -->
| Tool | Endpoint | Price |
|---|---|---|
scrape_apollo | /api/v1/scrape/apollo | $0.0039 per lead |
scrape_website_finder | /api/v1/scrape/website-finder | $0.0499 per contact found |
find_people | /api/v1/scrape/skip-trace | $0.0199 per result (searches with 0 matches are billed as 1 result) |
scrape_distress_list | /api/v1/scrape/distress-list | $0.05 per property |
validate_emails | /api/v1/scrape/email-validator | $0.0072 per email |
scrape_maps | /api/v1/scrape/maps | $0.0099 per business |
scrape_airbnb | /api/v1/scrape/airbnb-email | $0.019 per result ($19.00 per 1,000) |
scrape_bizbuysell | /api/v1/scrape/bizbuysell-scraper | $0.0099 per listing |
scrape_crexi | /api/v1/scrape/crexi-scraper | $0.029 per property |
scrape_angi | /api/v1/scrape/angi-angies-list-scraper | $0.0099 per listing |
scrape_yelp | /api/v1/scrape/yelp-scraper | $0.0099 per result |
scrape_zillow_agents | /api/v1/scrape/zillow-agents | $0.029 per agent |
scrape_property_lookup | /api/v1/scrape/property-lookup | $0.15 per property (+$0.10 for owner contact) |
search_criminal_records | /api/v1/scrape/criminal-records | $1.00 per search (only charged if records found) |
scrape_store_leads | /api/v1/scrape/store-leads | $0.0039 per lead |
scrape_builtwith | /api/v1/scrape/techstack | $4.99 per technology |
find_emails | /api/v1/scrape/email-finder | $0.05 per email found (FREE if not found) |
find_mobiles | /api/v1/scrape/mobile-finder | $0.25 per number found (FREE if not found) |
<!-- GENERATED:pricing:end -->
| Slug | Input | Cost | Speed |
|---|---|---|---|
apollo | {url, count, fileName} | $0.0039/lead | ~4 DAYS (use webhook) |
maps | {searchStringsArray:["query"], locationQuery, maxCrawledPlacesPerSearch} | $0.01/place | 5-30 min |
email-validator | {emails:["[email protected]"]} | $0.0036/email | 1-10 min |
email-finder | {contacts:[{first_name,last_name,domain}], autoValidateEmails, autoFindMobiles} | $0.05/contact | 1-10 min |
mobile-finder | {inputs:["linkedin.com/in/x","[email protected]"]} | $0.25/input | 1-5 min |
people-finder | {name:[], email:[], phone_number:[], street_citystatezip:[], max_results} | $0.02/result | 2-10 min |
store-leads | {platform, countryCode, totalLeads, emails:true, phones:true} | $0.0039/lead | instant |
builtwith | {technology} | $4.99 flat | 1-5 min |
criminal-records | {name, state, dob} | $1.00 if found | 2-5 min |
airbnb-email | {mode:"city", city:["Miami, FL"], maxResults:100} | $0.0001/listing | 10-30 min |
youtube-email | {channels:["@Handle","https://youtube.com/@X"]} | per channel | 5-15 min |
website-finder | {domains:["acme.com"], jobTitle:"CEO"} | per domain | 5-15 min |
yelp-scraper | {searchTerms:["plumbers"], locations:["Denver, CO"], searchLimit:10} | $0.01/listing | 5-15 min |
angi-angies-list-scraper | {keyword, zipCodes:["80202"], maxItems:100} | $0.01/listing | 5-15 min |
zillow-agents | {location:"Denver, CO", specialty, searchLimit:10} | per agent | 5-15 min |
bizbuysell-scraper | {startUrls:["<search-url>"], maxItems:100} | $0.01/listing | 5-15 min |
crexi-scraper | {startUrls:["<search-url>"]} | $0.029/listing | 5-15 min |
property-lookup | {addresses:["123 Main St, City, ST 12345"], includeOwnerContact:false} | $0.15/address | 2-10 min |
Apollo scrapes take up to 4 days to deliver. Do NOT poll in a loop.
app.scrapercity.com/dashboard/webhooks{runId, fileName, leadsCount}| Method | Path | Purpose |
|---|---|---|
| GET | /api/v1/wallet | Balance, plan, billing |
| GET | /api/v1/runs?hours=24&limit=50 | Recent runs |
| POST | /api/v1/scrape/cancel/{runId} | Cancel running job |
| GET | /api/v1/scrape/logs/{runId} | Run logs |
| GET | /api/v1/apollo-status | Apollo service health: {status: "url-based" or "legacy", message, timestamp} |
| GET | /api/v1/database/leads?title=CTO&country=United%20States&hasEmail=true&limit=100 | Lead DB ($149/mo plan and up, 100k new leads/day). Optional: excludeDelivered=true (only leads you don't have yet), after=0 then pagination.next_after (cursor paging). Company filters: keywords, revenueMin/revenueMax, companyCountry/companyState/companyCity. Exclusions: notTitle, notKeywords, notIndustry. Website technologies: technologies (any of), technologiesAll (all of), notTechnologies (none of). url=<people-search URL> searches with that URL's filters. POST with a JSON body takes the same parameters (use it for a long url) |
| GET | /api/v1/database/local-businesses?category=Dentist&country=US&hasContact=true&limit=100 | Local biz DB ($149/mo plan and up, 100k new businesses/day). Search like Google Maps: keyword (repeat; names and categories, any keyword) and location (repeat; cities, states, countries, postal codes), with searched_as in the response and lead_database when nothing is found but the Lead Database has 100+ people. Filters: category, country, state, city, postalCode, query, minRating/maxRating, minReviews/maxReviews, hasEmail, hasPhone, hasWebsite, hasContact (only businesses with a named contact person), title (business name), box=minLat,minLng,maxLat,maxLng (a map area). Exclusions: notCategory. url=<Google Maps search URL> searches with that URL's keyword and place. POST with a JSON body takes the same parameters (use it for a long url). Same optional excludeDelivered / after |
| GET | /api/v1/database/ecommerce?... | Ecommerce DB ($149/mo plan and up). Same optional excludeDelivered / after. Technologies: technologies (any of), technologiesAll (all of), notTechnologies (none of) |
| POST | /api/v1/database/plan | $149/mo plan and up (GET with ?query= also works). { "query": "dentists in Austin", "database"?: "leads" or "local" or "ecommerce" } -> ready-to-run searches: { targeting, searches: [{ database, name, filters, count, apiEndpoint, apiParams, link }] }. Send apiParams as they are to /api/v1/<apiEndpoint> |
| POST | /api/v1/autoleads/lookalike | $149/mo plan and up, $0.01 per site read. { "domains": ["acme.com", "[email protected]", ...] } (websites or work emails, at least 3 company sites) -> 202 { job }. Then GET /api/v1/autoleads/lookalike?id=<job id> until job.status is done: job.groups = [{ name, description, sites, database, filters, count, tool }]. Send a group's filters to that database's endpoint. 402 = balance under $0.01 x every site; 409 = a job is already running. Add &format=csv to the GET for every site as a CSV (no extra charge) |
RUNNING → SUCCEEDED or FAILED or CANCELLED
401 - bad or missing API key402 - insufficient balance (check wallet first)403 - account cancelled or charge processing409 - duplicate request (same search submitted recently)429 - rate limited / duplicate within 30s503 - service temporarily unavailablescrapercity maps -q "plumbers" -l "Denver, CO" --limit 500
scrapercity yelp -q "dentists" -l "Austin, TX"
scrapercity airbnb --city "Miami, FL" --limit 200
scrapercity youtube-email @MrBeast @PewDiePie
scrapercity website-finder acme.com example.com --title "CEO"
scrapercity angi -q "electricians" --zips "90210,90211"
scrapercity zillow-agents -l "Denver, CO"
scrapercity bizbuysell <bizbuysell-search-url>
scrapercity crexi <crexi-search-url>
scrapercity property-lookup "123 Main St, Denver, CO 80202" --owner-contact
scrapercity poll <runId> # polls until done
scrapercity download <runId> # saves CSVwallet before large scrapes to avoid 402 errors~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.