scrapercity 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT_DOCS.txt +205 -0
- package/README.md +128 -0
- package/SKILL.md +98 -0
- package/bin/cli.mjs +518 -0
- package/bin/mcp.mjs +474 -0
- package/lib/client.mjs +215 -0
- package/package.json +30 -0
package/AGENT_DOCS.txt
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
SCRAPERCITY API REFERENCE - FOR AI AGENTS
|
|
2
|
+
==========================================
|
|
3
|
+
|
|
4
|
+
BASE: https://app.scrapercity.com
|
|
5
|
+
AUTH: Authorization: Bearer <api_key>
|
|
6
|
+
ALL RESPONSES: JSON
|
|
7
|
+
PATTERN: POST start → GET status → GET download
|
|
8
|
+
|
|
9
|
+
PRICING: Plans $49, $149, $649/mo. Each gives wallet credits. Scrapers deduct per-lead.
|
|
10
|
+
|
|
11
|
+
────────────────────────────────────────
|
|
12
|
+
SCRAPE ENDPOINTS (POST /api/v1/scrape/{slug})
|
|
13
|
+
────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
apollo
|
|
16
|
+
Body: { url: "https://app.apollo.io/#/people?...", count: 1000, fileName: "My Export" }
|
|
17
|
+
Returns: { runId, message }
|
|
18
|
+
Cost: $0.0039/lead | Min 500, max 50000
|
|
19
|
+
DELIVERY: UP TO 4 DAYS. Use webhook, not polling.
|
|
20
|
+
|
|
21
|
+
apollo-filters
|
|
22
|
+
Body: { seniorityLevel, functionDept, companyIndustry, personCountry, personState,
|
|
23
|
+
companyCountry, companyState, companySize, personTitles:[], companyDomains:[],
|
|
24
|
+
companyKeywords:[], personCities:[], companyCities:[], hasPhone, count, fileName }
|
|
25
|
+
At least one filter required.
|
|
26
|
+
Returns: { runId, message }
|
|
27
|
+
Cost: $0.0039/lead | DELIVERY: UP TO 4 DAYS.
|
|
28
|
+
|
|
29
|
+
maps
|
|
30
|
+
Body: { searchStringsArray: ["plumbers"], locationQuery: "Denver, CO", maxCrawledPlacesPerSearch: 500 }
|
|
31
|
+
Returns: { runId, datasetId, priceMicro }
|
|
32
|
+
Cost: $0.01/place | Delivery: 5-30 min
|
|
33
|
+
|
|
34
|
+
email-validator
|
|
35
|
+
Body: { emails: ["user@example.com", "test@company.com"] }
|
|
36
|
+
Returns: { runId, emailCount, estimatedCost }
|
|
37
|
+
Cost: $0.0036/email | Delivery: 1-10 min
|
|
38
|
+
|
|
39
|
+
email-finder
|
|
40
|
+
Body: { contacts: [{ first_name: "John", last_name: "Doe", domain: "acme.com" }],
|
|
41
|
+
autoValidateEmails: false, autoFindMobiles: false }
|
|
42
|
+
Returns: { runId, contactCount, priceMicro }
|
|
43
|
+
Cost: $0.05/contact | Delivery: 1-10 min
|
|
44
|
+
|
|
45
|
+
mobile-finder
|
|
46
|
+
Body: { inputs: ["linkedin.com/in/johndoe", "jane@company.com"] }
|
|
47
|
+
Returns: { runId, inputCount, priceMicro }
|
|
48
|
+
Cost: $0.25/input | Delivery: 1-5 min
|
|
49
|
+
|
|
50
|
+
people-finder
|
|
51
|
+
Body: { name: ["John Doe"], email: [], phone_number: [], street_citystatezip: [], max_results: 1 }
|
|
52
|
+
Returns: { runId, totalSearches, estimatedCost }
|
|
53
|
+
Cost: $0.02/result | Delivery: 2-10 min
|
|
54
|
+
|
|
55
|
+
store-leads
|
|
56
|
+
Body: { platform: "shopify", countryCode: "US", totalLeads: 1000,
|
|
57
|
+
emails: true, phones: true, category: "", city: "" }
|
|
58
|
+
Returns: { runId, totalLeads, estimatedCost }
|
|
59
|
+
Cost: $0.0039/lead | Delivery: INSTANT (cached DB)
|
|
60
|
+
|
|
61
|
+
builtwith
|
|
62
|
+
Body: { technology: "Shopify", fileName: "Shopify sites" }
|
|
63
|
+
Returns: { runId, technology, estimatedCost }
|
|
64
|
+
Cost: $4.99 flat | Delivery: 1-5 min
|
|
65
|
+
|
|
66
|
+
criminal-records
|
|
67
|
+
Body: { name: "John Smith", state: "CA", dob: "02/07/1992" }
|
|
68
|
+
state and dob optional.
|
|
69
|
+
Returns: { runId, name, state }
|
|
70
|
+
Cost: $1.00 only if records found | Delivery: 2-5 min
|
|
71
|
+
|
|
72
|
+
airbnb-email
|
|
73
|
+
Body: { mode: "city", city: ["Miami, FL"], maxResults: 100 }
|
|
74
|
+
Modes: "city" (search cities), "single" (one listing URL), "bulk" (multiple listing URLs)
|
|
75
|
+
For single: { mode: "single", listingUrl: "https://airbnb.com/rooms/..." }
|
|
76
|
+
Optional: checkin, checkout, maxPages, onlyProHosts, onlyUniqueEmails
|
|
77
|
+
Returns: { runId }
|
|
78
|
+
Cost: $0.0001/listing | Delivery: 10-30 min
|
|
79
|
+
|
|
80
|
+
youtube-email
|
|
81
|
+
Body: { channels: ["@MrBeast", "https://youtube.com/@Channel"] }
|
|
82
|
+
Accepts @handles or full YouTube URLs.
|
|
83
|
+
Returns: { runId }
|
|
84
|
+
Cost: per channel | Delivery: 5-15 min
|
|
85
|
+
|
|
86
|
+
website-finder
|
|
87
|
+
Body: { domains: ["acme.com", "example.com"], jobTitle: "CEO" }
|
|
88
|
+
jobTitle is optional. Domains without https prefix.
|
|
89
|
+
Returns: { runId }
|
|
90
|
+
Cost: per domain | Delivery: 5-15 min
|
|
91
|
+
|
|
92
|
+
yelp-scraper
|
|
93
|
+
Body: { searchTerms: ["plumbers"], locations: ["Denver, CO"], searchLimit: 10 }
|
|
94
|
+
OR: { directUrls: ["https://yelp.com/biz/..."] }
|
|
95
|
+
Returns: { runId }
|
|
96
|
+
Cost: $0.01/listing | Delivery: 5-15 min
|
|
97
|
+
|
|
98
|
+
angi-angies-list-scraper
|
|
99
|
+
Body: { keyword: "plumbers", zipCodes: ["80202", "80203"], maxItems: 100 }
|
|
100
|
+
Returns: { runId }
|
|
101
|
+
Cost: $0.01/listing | Delivery: 5-15 min
|
|
102
|
+
|
|
103
|
+
zillow-agents
|
|
104
|
+
Body: { location: "Denver, CO", specialty: "buyer", language: "English", searchLimit: 10 }
|
|
105
|
+
specialty and language optional.
|
|
106
|
+
Returns: { runId }
|
|
107
|
+
Cost: per agent | Delivery: 5-15 min
|
|
108
|
+
|
|
109
|
+
bizbuysell-scraper
|
|
110
|
+
Body: { startUrls: ["https://bizbuysell.com/..."], maxItems: 100 }
|
|
111
|
+
Pass BizBuySell search result URLs.
|
|
112
|
+
Returns: { runId }
|
|
113
|
+
Cost: $0.01/listing | Delivery: 5-15 min
|
|
114
|
+
|
|
115
|
+
crexi-scraper
|
|
116
|
+
Body: { startUrls: ["https://crexi.com/..."] }
|
|
117
|
+
Pass Crexi search result URLs.
|
|
118
|
+
Returns: { runId }
|
|
119
|
+
Cost: $0.029/listing | Delivery: 5-15 min
|
|
120
|
+
|
|
121
|
+
property-lookup
|
|
122
|
+
Body: { addresses: ["123 Main St, Denver, CO 80202"], includeOwnerContact: false }
|
|
123
|
+
Full address with city, state, zip required.
|
|
124
|
+
Returns: { runId }
|
|
125
|
+
Cost: $0.15/address | Delivery: 2-10 min
|
|
126
|
+
|
|
127
|
+
────────────────────────────────────────
|
|
128
|
+
STATUS & DOWNLOAD
|
|
129
|
+
────────────────────────────────────────
|
|
130
|
+
|
|
131
|
+
GET /api/v1/scrape/status/{runId}
|
|
132
|
+
Returns: { status, statusMessage, handled, requested, outputUrl }
|
|
133
|
+
Status values: RUNNING | SUCCEEDED | FAILED | CANCELLED
|
|
134
|
+
When SUCCEEDED: outputUrl = "/api/downloads/{runId}"
|
|
135
|
+
|
|
136
|
+
GET /api/downloads/{runId}
|
|
137
|
+
Returns: CSV file (binary stream)
|
|
138
|
+
Only available when status = SUCCEEDED
|
|
139
|
+
|
|
140
|
+
POST /api/v1/scrape/cancel/{runId}
|
|
141
|
+
Cancel a running job.
|
|
142
|
+
|
|
143
|
+
GET /api/v1/scrape/logs/{runId}
|
|
144
|
+
View run logs.
|
|
145
|
+
|
|
146
|
+
────────────────────────────────────────
|
|
147
|
+
ACCOUNT
|
|
148
|
+
────────────────────────────────────────
|
|
149
|
+
|
|
150
|
+
GET /api/v1/wallet
|
|
151
|
+
Returns: { email, wallet: { balance_dollars, total_balance_dollars }, plan: { name, usage_percent }, billing: { next_billing_date } }
|
|
152
|
+
|
|
153
|
+
GET /api/v1/runs?hours=24&limit=50
|
|
154
|
+
Returns: { runs: [{ run_id, status, handled, url, file_name, created_at }] }
|
|
155
|
+
|
|
156
|
+
GET /api/v1/apollo-status
|
|
157
|
+
Returns: { useApify, message } - check if Apollo URL endpoint is available
|
|
158
|
+
|
|
159
|
+
────────────────────────────────────────
|
|
160
|
+
DATABASES (GET, $649 plan only, 100k/day)
|
|
161
|
+
────────────────────────────────────────
|
|
162
|
+
|
|
163
|
+
GET /api/v1/database/leads?title=CTO&country=United States&hasEmail=true&page=1&limit=100
|
|
164
|
+
Filters: title, industry, country, state, city, companyName, companyDomain,
|
|
165
|
+
companySize, seniority, department, hasEmail, hasPhone, minEmployees, maxEmployees
|
|
166
|
+
Array params use repeated keys: ?seniority=vp&seniority=director
|
|
167
|
+
Returns: { data: [...leads], pagination: { page, limit, total, totalPages } }
|
|
168
|
+
|
|
169
|
+
GET /api/v1/database/local-businesses?...
|
|
170
|
+
GET /api/v1/database/ecommerce?...
|
|
171
|
+
Same pattern, different datasets.
|
|
172
|
+
|
|
173
|
+
────────────────────────────────────────
|
|
174
|
+
ERROR CODES
|
|
175
|
+
────────────────────────────────────────
|
|
176
|
+
401 = Invalid/missing API key
|
|
177
|
+
402 = Insufficient balance (check wallet first!)
|
|
178
|
+
403 = Account cancelled or charge processing
|
|
179
|
+
409 = Duplicate request (same search within 2 min)
|
|
180
|
+
429 = Rate limited / duplicate within 30s
|
|
181
|
+
503 = Service temporarily unavailable
|
|
182
|
+
|
|
183
|
+
────────────────────────────────────────
|
|
184
|
+
WORKFLOW EXAMPLES
|
|
185
|
+
────────────────────────────────────────
|
|
186
|
+
|
|
187
|
+
1. MAPS SCRAPE (fast):
|
|
188
|
+
POST /api/v1/scrape/maps → get runId → poll status every 15s → download CSV
|
|
189
|
+
|
|
190
|
+
2. APOLLO SCRAPE (slow):
|
|
191
|
+
POST /api/v1/scrape/apollo → get runId → configure webhook → wait for callback
|
|
192
|
+
Do NOT poll Apollo in a tight loop. Check once per hour at most.
|
|
193
|
+
|
|
194
|
+
3. ENRICH PIPELINE:
|
|
195
|
+
Apollo/Maps → download CSV → extract emails → POST email-validator → download validated CSV
|
|
196
|
+
|
|
197
|
+
4. LEAD DATABASE (instant):
|
|
198
|
+
GET /api/v1/database/leads?title=CTO&industry=computer+software&hasEmail=true&page=1
|
|
199
|
+
Loop pages until page > totalPages
|
|
200
|
+
|
|
201
|
+
5. LOCAL BUSINESS PIPELINE:
|
|
202
|
+
Yelp/Angi/Maps → download CSV → POST email-finder with names+domains → POST mobile-finder
|
|
203
|
+
|
|
204
|
+
6. REAL ESTATE PIPELINE:
|
|
205
|
+
Zillow Agents + Property Lookup → download CSVs → enrich with email-finder
|
package/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# ScraperCity - B2B Lead Generation for AI Agents
|
|
2
|
+
|
|
3
|
+
Pull leads, validate emails, find mobile numbers, and scrape business data - all from your AI agent, CLI, or code.
|
|
4
|
+
|
|
5
|
+
ScraperCity gives AI agents access to 15+ B2B data tools: Apollo scraping, Google Maps extraction, email finding/validation, mobile number lookup, skip tracing, ecommerce store data, criminal records, and more.
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
8
|
+
|
|
9
|
+
### Option 1: CLI
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx scrapercity login # enter your API key
|
|
13
|
+
npx scrapercity wallet # check balance
|
|
14
|
+
npx scrapercity maps -q "plumbers" -l "Denver, CO"
|
|
15
|
+
npx scrapercity poll <runId> # wait for results
|
|
16
|
+
npx scrapercity download <runId> # save CSV
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Option 2: MCP Server (Claude Code, Cursor, Windsurf, etc.)
|
|
20
|
+
|
|
21
|
+
Add to your MCP config (e.g. `~/.claude/claude_desktop_config.json`):
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"mcpServers": {
|
|
26
|
+
"scrapercity": {
|
|
27
|
+
"command": "npx",
|
|
28
|
+
"args": ["-y", "scrapercity-mcp"],
|
|
29
|
+
"env": {
|
|
30
|
+
"SCRAPERCITY_API_KEY": "your_api_key_here"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then tell your AI: *"Find 1000 plumbers in Denver with emails using ScraperCity"*
|
|
38
|
+
|
|
39
|
+
### Option 3: Skill File (Claude Code)
|
|
40
|
+
|
|
41
|
+
Copy the skill file into your project:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx scrapercity-mcp --print-skill > SCRAPERCITY_SKILL.md
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or download from: `https://scrapercity.com/agents/SKILL.md`
|
|
48
|
+
|
|
49
|
+
Then in Claude Code: *"Read SCRAPERCITY_SKILL.md and find me 2000 marketing directors at SaaS companies in California, validate their emails, and save to leads.csv"*
|
|
50
|
+
|
|
51
|
+
### Option 4: Direct API
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Start a Maps scrape
|
|
55
|
+
curl -X POST https://app.scrapercity.com/api/v1/scrape/maps \
|
|
56
|
+
-H "Authorization: Bearer $SCRAPERCITY_API_KEY" \
|
|
57
|
+
-H "Content-Type: application/json" \
|
|
58
|
+
-d '{"searchStringsArray":["plumbers"],"locationQuery":"Denver, CO","maxCrawledPlacesPerSearch":500}'
|
|
59
|
+
|
|
60
|
+
# Check status
|
|
61
|
+
curl https://app.scrapercity.com/api/v1/scrape/status/RUN_ID \
|
|
62
|
+
-H "Authorization: Bearer $SCRAPERCITY_API_KEY"
|
|
63
|
+
|
|
64
|
+
# Download CSV when SUCCEEDED
|
|
65
|
+
curl -O https://app.scrapercity.com/api/downloads/RUN_ID \
|
|
66
|
+
-H "Authorization: Bearer $SCRAPERCITY_API_KEY"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Available Tools
|
|
70
|
+
|
|
71
|
+
| Tool | What it does | Cost |
|
|
72
|
+
|------|-------------|------|
|
|
73
|
+
| **Apollo** | B2B contacts by job title, industry, location | $0.0039/lead |
|
|
74
|
+
| **Google Maps** | Local businesses with phones, emails, reviews | $0.01/place |
|
|
75
|
+
| **Email Validator** | Verify deliverability, catch-all, MX records | $0.0036/email |
|
|
76
|
+
| **Email Finder** | Find business email from name + company | $0.05/contact |
|
|
77
|
+
| **Mobile Finder** | Phone numbers from LinkedIn or email | $0.25/input |
|
|
78
|
+
| **People Finder** | Skip trace by name, email, phone, address | $0.02/result |
|
|
79
|
+
| **Store Leads** | Shopify/WooCommerce stores with contacts | $0.0039/lead |
|
|
80
|
+
| **BuiltWith** | All sites using a technology | $4.99/search |
|
|
81
|
+
| **Criminal Records** | Background check by name | $1.00 if found |
|
|
82
|
+
| **Lead Database** | 3M+ B2B contacts, instant query ($649 plan) | Included |
|
|
83
|
+
|
|
84
|
+
## How It Works
|
|
85
|
+
|
|
86
|
+
1. **Start a scrape** → get a `runId`
|
|
87
|
+
2. **Poll status** (or use webhooks) → wait for `SUCCEEDED`
|
|
88
|
+
3. **Download CSV** → leads with full contact info
|
|
89
|
+
|
|
90
|
+
Apollo scrapes take up to 4 days. All other scrapers: 1-30 minutes. Store leads are instant.
|
|
91
|
+
|
|
92
|
+
## Authentication
|
|
93
|
+
|
|
94
|
+
Get your API key at [app.scrapercity.com/dashboard/api-docs](https://app.scrapercity.com/dashboard/api-docs)
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Environment variable (recommended)
|
|
98
|
+
export SCRAPERCITY_API_KEY="your_key"
|
|
99
|
+
|
|
100
|
+
# Or save to config file
|
|
101
|
+
npx scrapercity login
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Webhooks
|
|
105
|
+
|
|
106
|
+
For Apollo and long-running scrapes, configure a webhook at [app.scrapercity.com/dashboard/webhooks](https://app.scrapercity.com/dashboard/webhooks) to get notified when results are ready.
|
|
107
|
+
|
|
108
|
+
## Plans
|
|
109
|
+
|
|
110
|
+
| Plan | Price | Credits |
|
|
111
|
+
|------|-------|---------|
|
|
112
|
+
| Trial | Free | $5 |
|
|
113
|
+
| Starter | $49/mo | $49 |
|
|
114
|
+
| Growth | $149/mo | $149 + 10% bonus |
|
|
115
|
+
| Professional | $649/mo | $649 + 30% bonus + Database API |
|
|
116
|
+
|
|
117
|
+
Buy additional credits anytime. [scrapercity.com/pricing](https://scrapercity.com/pricing)
|
|
118
|
+
|
|
119
|
+
## Links
|
|
120
|
+
|
|
121
|
+
- [Agent Docs](https://scrapercity.com/agents) - setup guide
|
|
122
|
+
- [API Reference](https://scrapercity.com/api-docs) - full documentation
|
|
123
|
+
- [Skill File](https://scrapercity.com/agents/SKILL.md) - for Claude Code
|
|
124
|
+
- [MCP Server Listing](https://scrapercity.com/agents) - configuration
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
MIT
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# ScraperCity - B2B Lead Generation
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
```bash
|
|
5
|
+
export SCRAPERCITY_API_KEY="your_key" # get from app.scrapercity.com/dashboard/api-docs
|
|
6
|
+
npx scrapercity wallet # verify balance
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Core Pattern
|
|
10
|
+
Every scraper follows: **start → poll → download**
|
|
11
|
+
```
|
|
12
|
+
POST /api/v1/scrape/{slug} → { runId }
|
|
13
|
+
GET /api/v1/scrape/status/{runId} → { status, handled, outputUrl }
|
|
14
|
+
GET /api/downloads/{runId} → CSV file
|
|
15
|
+
```
|
|
16
|
+
Auth: `Authorization: Bearer $SCRAPERCITY_API_KEY` on all requests.
|
|
17
|
+
|
|
18
|
+
## All Scrapers (POST to /api/v1/scrape/{slug})
|
|
19
|
+
|
|
20
|
+
| Slug | Input | Cost | Speed |
|
|
21
|
+
|------|-------|------|-------|
|
|
22
|
+
| `apollo` | `{url, count, fileName}` | $0.0039/lead | ~4 DAYS (use webhook) |
|
|
23
|
+
| `apollo-filters` | `{seniorityLevel, functionDept, companyIndustry, personCountry, personState, companySize, personTitles[], companyDomains[], count}` | $0.0039/lead | ~4 DAYS |
|
|
24
|
+
| `maps` | `{searchStringsArray:["query"], locationQuery, maxCrawledPlacesPerSearch}` | $0.01/place | 5-30 min |
|
|
25
|
+
| `email-validator` | `{emails:["a@b.com"]}` | $0.0036/email | 1-10 min |
|
|
26
|
+
| `email-finder` | `{contacts:[{first_name,last_name,domain}], autoValidateEmails, autoFindMobiles}` | $0.05/contact | 1-10 min |
|
|
27
|
+
| `mobile-finder` | `{inputs:["linkedin.com/in/x","email@co.com"]}` | $0.25/input | 1-5 min |
|
|
28
|
+
| `people-finder` | `{name:[], email:[], phone_number:[], street_citystatezip:[], max_results}` | $0.02/result | 2-10 min |
|
|
29
|
+
| `store-leads` | `{platform, countryCode, totalLeads, emails:true, phones:true}` | $0.0039/lead | instant |
|
|
30
|
+
| `builtwith` | `{technology}` | $4.99 flat | 1-5 min |
|
|
31
|
+
| `criminal-records` | `{name, state, dob}` | $1.00 if found | 2-5 min |
|
|
32
|
+
| `airbnb-email` | `{mode:"city", city:["Miami, FL"], maxResults:100}` | $0.0001/listing | 10-30 min |
|
|
33
|
+
| `youtube-email` | `{channels:["@Handle","https://youtube.com/@X"]}` | per channel | 5-15 min |
|
|
34
|
+
| `website-finder` | `{domains:["acme.com"], jobTitle:"CEO"}` | per domain | 5-15 min |
|
|
35
|
+
| `yelp-scraper` | `{searchTerms:["plumbers"], locations:["Denver, CO"], searchLimit:10}` | $0.01/listing | 5-15 min |
|
|
36
|
+
| `angi-angies-list-scraper` | `{keyword, zipCodes:["80202"], maxItems:100}` | $0.01/listing | 5-15 min |
|
|
37
|
+
| `zillow-agents` | `{location:"Denver, CO", specialty, searchLimit:10}` | per agent | 5-15 min |
|
|
38
|
+
| `bizbuysell-scraper` | `{startUrls:["<search-url>"], maxItems:100}` | $0.01/listing | 5-15 min |
|
|
39
|
+
| `crexi-scraper` | `{startUrls:["<search-url>"]}` | $0.029/listing | 5-15 min |
|
|
40
|
+
| `property-lookup` | `{addresses:["123 Main St, City, ST 12345"], includeOwnerContact:false}` | $0.15/address | 2-10 min |
|
|
41
|
+
|
|
42
|
+
## ⚠ Apollo Delivery
|
|
43
|
+
Apollo scrapes take **up to 4 days** to deliver. Do NOT poll in a loop.
|
|
44
|
+
- Set up a webhook at `app.scrapercity.com/dashboard/webhooks`
|
|
45
|
+
- Webhook fires when results are ready with `{runId, fileName, leadsCount}`
|
|
46
|
+
- If you must poll, check once per hour max
|
|
47
|
+
|
|
48
|
+
## Other Endpoints
|
|
49
|
+
|
|
50
|
+
| Method | Path | Purpose |
|
|
51
|
+
|--------|------|---------|
|
|
52
|
+
| GET | `/api/v1/wallet` | Balance, plan, billing |
|
|
53
|
+
| GET | `/api/v1/runs?hours=24&limit=50` | Recent runs |
|
|
54
|
+
| POST | `/api/v1/scrape/cancel/{runId}` | Cancel running job |
|
|
55
|
+
| GET | `/api/v1/scrape/logs/{runId}` | Run logs |
|
|
56
|
+
| GET | `/api/v1/apollo-status` | Apollo service health |
|
|
57
|
+
| GET | `/api/v1/database/leads?title=CTO&country=US&hasEmail=true&page=1&limit=100` | Lead DB ($649 plan, 100k/day) |
|
|
58
|
+
| GET | `/api/v1/database/local-businesses?...` | Local biz DB ($649 plan) |
|
|
59
|
+
| GET | `/api/v1/database/ecommerce?...` | Ecommerce DB ($649 plan) |
|
|
60
|
+
|
|
61
|
+
## Status Values
|
|
62
|
+
`RUNNING` → `SUCCEEDED` or `FAILED` or `CANCELLED`
|
|
63
|
+
|
|
64
|
+
## Error Codes
|
|
65
|
+
- `401` - bad or missing API key
|
|
66
|
+
- `402` - insufficient balance (check wallet first)
|
|
67
|
+
- `403` - account cancelled or charge processing
|
|
68
|
+
- `409` - duplicate request (same search submitted recently)
|
|
69
|
+
- `429` - rate limited / duplicate within 30s
|
|
70
|
+
- `503` - service temporarily unavailable
|
|
71
|
+
|
|
72
|
+
## CLI Shorthand
|
|
73
|
+
```bash
|
|
74
|
+
scrapercity maps -q "plumbers" -l "Denver, CO" --limit 500
|
|
75
|
+
scrapercity yelp -q "dentists" -l "Austin, TX"
|
|
76
|
+
scrapercity airbnb --city "Miami, FL" --limit 200
|
|
77
|
+
scrapercity youtube-email @MrBeast @PewDiePie
|
|
78
|
+
scrapercity website-finder acme.com example.com --title "CEO"
|
|
79
|
+
scrapercity angi -q "electricians" --zips "90210,90211"
|
|
80
|
+
scrapercity zillow-agents -l "Denver, CO"
|
|
81
|
+
scrapercity bizbuysell <bizbuysell-search-url>
|
|
82
|
+
scrapercity crexi <crexi-search-url>
|
|
83
|
+
scrapercity property-lookup "123 Main St, Denver, CO 80202" --owner-contact
|
|
84
|
+
scrapercity poll <runId> # polls until done
|
|
85
|
+
scrapercity download <runId> # saves CSV
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Tips
|
|
89
|
+
- Always check `wallet` before large scrapes to avoid 402 errors
|
|
90
|
+
- Apollo URL must be from apollo.io People search - other pages rejected
|
|
91
|
+
- Maps: split large metro areas into sub-cities for better coverage
|
|
92
|
+
- Email validator: dedupes automatically, only charges for unique emails
|
|
93
|
+
- Store leads: zero COGS (cached DB), instant results
|
|
94
|
+
- Yelp/Angi: can also pass directUrls instead of search terms
|
|
95
|
+
- YouTube: accepts both @handles and full channel URLs
|
|
96
|
+
- Website finder: domains only, no https:// prefix needed
|
|
97
|
+
- Property lookup: full address with city, state, zip required
|
|
98
|
+
- Downloads return CSV with all available fields
|