scrapercity 1.0.4 → 1.0.7
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 +42 -12
- package/README.md +24 -0
- package/SKILL.md +25 -0
- package/bin/cli.mjs +10 -28
- package/bin/mcp.mjs +64 -397
- package/lib/catalog.generated.mjs +623 -0
- package/lib/client.mjs +26 -33
- package/package.json +6 -2
package/AGENT_DOCS.txt
CHANGED
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
SCRAPERCITY API REFERENCE - FOR AI AGENTS
|
|
2
2
|
==========================================
|
|
3
3
|
|
|
4
|
+
|
|
5
|
+
PRICING (auto-generated from the live catalog - do not edit)
|
|
6
|
+
|
|
7
|
+
<!-- GENERATED:pricing:start -->
|
|
8
|
+
| Tool | Endpoint | Price |
|
|
9
|
+
|------|----------|-------|
|
|
10
|
+
| `scrape_apollo` | /api/v1/scrape/apollo | $0.0039 per lead |
|
|
11
|
+
| `scrape_website_finder` | /api/v1/scrape/website-finder | $0.05 per contact found |
|
|
12
|
+
| `find_people` | /api/v1/scrape/skip-trace | $0.0199 per result (searches with 0 matches are billed as 1 result) |
|
|
13
|
+
| `scrape_distress_list` | /api/v1/scrape/distress-list | $0.05 per property |
|
|
14
|
+
| `validate_emails` | /api/v1/scrape/email-validator | $0.0072 per email |
|
|
15
|
+
| `scrape_maps` | /api/v1/scrape/maps | $0.0099 per business |
|
|
16
|
+
| `scrape_airbnb` | /api/v1/scrape/airbnb-email | $0.019 per result ($19.00 per 1,000) |
|
|
17
|
+
| `scrape_bizbuysell` | /api/v1/scrape/bizbuysell-scraper | $0.01 per listing |
|
|
18
|
+
| `scrape_crexi` | /api/v1/scrape/crexi-scraper | $0.029 per property |
|
|
19
|
+
| `scrape_angi` | /api/v1/scrape/angi-angies-list-scraper | $0.01 per listing |
|
|
20
|
+
| `scrape_yelp` | /api/v1/scrape/yelp-scraper | $0.01 per result |
|
|
21
|
+
| `scrape_zillow_agents` | /api/v1/scrape/zillow-agents | $0.029 per agent |
|
|
22
|
+
| `search_criminal_records` | /api/v1/scrape/criminal-records | $1.00 per search (only charged if records found) |
|
|
23
|
+
| `scrape_store_leads` | /api/v1/scrape/store-leads | $0.0039 per lead |
|
|
24
|
+
| `scrape_builtwith` | /api/v1/scrape/techstack | $4.99 per technology |
|
|
25
|
+
| `find_emails` | /api/v1/scrape/email-finder | $0.05 per email found (FREE if not found) |
|
|
26
|
+
| `find_mobiles` | /api/v1/scrape/mobile-finder | $0.25 per number found (FREE if not found) |
|
|
27
|
+
<!-- GENERATED:pricing:end -->
|
|
28
|
+
|
|
4
29
|
BASE: https://app.scrapercity.com
|
|
5
30
|
AUTH: Authorization: Bearer <api_key>
|
|
6
31
|
ALL RESPONSES: JSON
|
|
@@ -18,6 +43,14 @@ apollo
|
|
|
18
43
|
Cost: $0.0039/lead | Min 500, max 50000
|
|
19
44
|
DELIVERY: UP TO 4 DAYS. Use webhook, not polling.
|
|
20
45
|
|
|
46
|
+
apollo-filters
|
|
47
|
+
Body: { seniorityLevel, functionDept, companyIndustry, personCountry, personState,
|
|
48
|
+
companyCountry, companyState, companySize, personTitles:[], companyDomains:[],
|
|
49
|
+
companyKeywords:[], personCities:[], companyCities:[], hasPhone, count, fileName }
|
|
50
|
+
At least one filter required.
|
|
51
|
+
Returns: { runId, message }
|
|
52
|
+
Cost: $0.0039/lead | DELIVERY: UP TO 4 DAYS.
|
|
53
|
+
|
|
21
54
|
maps
|
|
22
55
|
Body: { searchStringsArray: ["plumbers"], locationQuery: "Denver, CO", maxCrawledPlacesPerSearch: 500 }
|
|
23
56
|
Returns: { runId, datasetId, priceMicro }
|
|
@@ -149,9 +182,7 @@ GET /api/v1/apollo-status
|
|
|
149
182
|
Returns: { useApify, message } - check if Apollo URL endpoint is available
|
|
150
183
|
|
|
151
184
|
────────────────────────────────────────
|
|
152
|
-
DATABASES (GET, $
|
|
153
|
-
This is the recommended path for filter-based B2B people search (by title,
|
|
154
|
-
industry, location, seniority, etc). Returns instantly from a cached dataset.
|
|
185
|
+
DATABASES (GET, $649 plan only, 100k/day)
|
|
155
186
|
────────────────────────────────────────
|
|
156
187
|
|
|
157
188
|
GET /api/v1/database/leads?title=CTO&country=United States&hasEmail=true&page=1&limit=100
|
|
@@ -178,20 +209,19 @@ ERROR CODES
|
|
|
178
209
|
WORKFLOW EXAMPLES
|
|
179
210
|
────────────────────────────────────────
|
|
180
211
|
|
|
181
|
-
1.
|
|
182
|
-
GET /api/v1/database/leads?title=CTO&industry=computer+software&hasEmail=true&page=1
|
|
183
|
-
Loop pages until page > totalPages.
|
|
184
|
-
This is the supported path for filter-based B2B contact search ($149+ plans).
|
|
185
|
-
|
|
186
|
-
2. MAPS SCRAPE (fast):
|
|
212
|
+
1. MAPS SCRAPE (fast):
|
|
187
213
|
POST /api/v1/scrape/maps → get runId → poll status every 15s → download CSV
|
|
188
214
|
|
|
189
|
-
|
|
215
|
+
2. APOLLO SCRAPE (slow):
|
|
190
216
|
POST /api/v1/scrape/apollo → get runId → configure webhook → wait for callback
|
|
191
217
|
Do NOT poll Apollo in a tight loop. Check once per hour at most.
|
|
192
218
|
|
|
193
|
-
|
|
194
|
-
|
|
219
|
+
3. ENRICH PIPELINE:
|
|
220
|
+
Apollo/Maps → download CSV → extract emails → POST email-validator → download validated CSV
|
|
221
|
+
|
|
222
|
+
4. LEAD DATABASE (instant):
|
|
223
|
+
GET /api/v1/database/leads?title=CTO&industry=computer+software&hasEmail=true&page=1
|
|
224
|
+
Loop pages until page > totalPages
|
|
195
225
|
|
|
196
226
|
5. LOCAL BUSINESS PIPELINE:
|
|
197
227
|
Yelp/Angi/Maps → download CSV → POST email-finder with names+domains → POST mobile-finder
|
package/README.md
CHANGED
|
@@ -66,6 +66,30 @@ curl -O https://app.scrapercity.com/api/downloads/RUN_ID \
|
|
|
66
66
|
-H "Authorization: Bearer $SCRAPERCITY_API_KEY"
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
+
## Pricing (auto-generated from the live catalog — do not edit)
|
|
70
|
+
|
|
71
|
+
<!-- GENERATED:pricing:start -->
|
|
72
|
+
| Tool | Endpoint | Price |
|
|
73
|
+
|------|----------|-------|
|
|
74
|
+
| `scrape_apollo` | /api/v1/scrape/apollo | $0.0039 per lead |
|
|
75
|
+
| `scrape_website_finder` | /api/v1/scrape/website-finder | $0.05 per contact found |
|
|
76
|
+
| `find_people` | /api/v1/scrape/skip-trace | $0.0199 per result (searches with 0 matches are billed as 1 result) |
|
|
77
|
+
| `scrape_distress_list` | /api/v1/scrape/distress-list | $0.05 per property |
|
|
78
|
+
| `validate_emails` | /api/v1/scrape/email-validator | $0.0072 per email |
|
|
79
|
+
| `scrape_maps` | /api/v1/scrape/maps | $0.0099 per business |
|
|
80
|
+
| `scrape_airbnb` | /api/v1/scrape/airbnb-email | $0.019 per result ($19.00 per 1,000) |
|
|
81
|
+
| `scrape_bizbuysell` | /api/v1/scrape/bizbuysell-scraper | $0.01 per listing |
|
|
82
|
+
| `scrape_crexi` | /api/v1/scrape/crexi-scraper | $0.029 per property |
|
|
83
|
+
| `scrape_angi` | /api/v1/scrape/angi-angies-list-scraper | $0.01 per listing |
|
|
84
|
+
| `scrape_yelp` | /api/v1/scrape/yelp-scraper | $0.01 per result |
|
|
85
|
+
| `scrape_zillow_agents` | /api/v1/scrape/zillow-agents | $0.029 per agent |
|
|
86
|
+
| `search_criminal_records` | /api/v1/scrape/criminal-records | $1.00 per search (only charged if records found) |
|
|
87
|
+
| `scrape_store_leads` | /api/v1/scrape/store-leads | $0.0039 per lead |
|
|
88
|
+
| `scrape_builtwith` | /api/v1/scrape/techstack | $4.99 per technology |
|
|
89
|
+
| `find_emails` | /api/v1/scrape/email-finder | $0.05 per email found (FREE if not found) |
|
|
90
|
+
| `find_mobiles` | /api/v1/scrape/mobile-finder | $0.25 per number found (FREE if not found) |
|
|
91
|
+
<!-- GENERATED:pricing:end -->
|
|
92
|
+
|
|
69
93
|
## Available Tools
|
|
70
94
|
|
|
71
95
|
| Tool | What it does | Cost |
|
package/SKILL.md
CHANGED
|
@@ -15,11 +15,36 @@ GET /api/downloads/{runId} → CSV file
|
|
|
15
15
|
```
|
|
16
16
|
Auth: `Authorization: Bearer $SCRAPERCITY_API_KEY` on all requests.
|
|
17
17
|
|
|
18
|
+
## Pricing (auto-generated from the live catalog — do not edit)
|
|
19
|
+
|
|
20
|
+
<!-- GENERATED:pricing:start -->
|
|
21
|
+
| Tool | Endpoint | Price |
|
|
22
|
+
|------|----------|-------|
|
|
23
|
+
| `scrape_apollo` | /api/v1/scrape/apollo | $0.0039 per lead |
|
|
24
|
+
| `scrape_website_finder` | /api/v1/scrape/website-finder | $0.05 per contact found |
|
|
25
|
+
| `find_people` | /api/v1/scrape/skip-trace | $0.0199 per result (searches with 0 matches are billed as 1 result) |
|
|
26
|
+
| `scrape_distress_list` | /api/v1/scrape/distress-list | $0.05 per property |
|
|
27
|
+
| `validate_emails` | /api/v1/scrape/email-validator | $0.0072 per email |
|
|
28
|
+
| `scrape_maps` | /api/v1/scrape/maps | $0.0099 per business |
|
|
29
|
+
| `scrape_airbnb` | /api/v1/scrape/airbnb-email | $0.019 per result ($19.00 per 1,000) |
|
|
30
|
+
| `scrape_bizbuysell` | /api/v1/scrape/bizbuysell-scraper | $0.01 per listing |
|
|
31
|
+
| `scrape_crexi` | /api/v1/scrape/crexi-scraper | $0.029 per property |
|
|
32
|
+
| `scrape_angi` | /api/v1/scrape/angi-angies-list-scraper | $0.01 per listing |
|
|
33
|
+
| `scrape_yelp` | /api/v1/scrape/yelp-scraper | $0.01 per result |
|
|
34
|
+
| `scrape_zillow_agents` | /api/v1/scrape/zillow-agents | $0.029 per agent |
|
|
35
|
+
| `search_criminal_records` | /api/v1/scrape/criminal-records | $1.00 per search (only charged if records found) |
|
|
36
|
+
| `scrape_store_leads` | /api/v1/scrape/store-leads | $0.0039 per lead |
|
|
37
|
+
| `scrape_builtwith` | /api/v1/scrape/techstack | $4.99 per technology |
|
|
38
|
+
| `find_emails` | /api/v1/scrape/email-finder | $0.05 per email found (FREE if not found) |
|
|
39
|
+
| `find_mobiles` | /api/v1/scrape/mobile-finder | $0.25 per number found (FREE if not found) |
|
|
40
|
+
<!-- GENERATED:pricing:end -->
|
|
41
|
+
|
|
18
42
|
## All Scrapers (POST to /api/v1/scrape/{slug})
|
|
19
43
|
|
|
20
44
|
| Slug | Input | Cost | Speed |
|
|
21
45
|
|------|-------|------|-------|
|
|
22
46
|
| `apollo` | `{url, count, fileName}` | $0.0039/lead | ~4 DAYS (use webhook) |
|
|
47
|
+
| `apollo-filters` | `{seniorityLevel, functionDept, companyIndustry, personCountry, personState, companySize, personTitles[], companyDomains[], count}` | $0.0039/lead | ~4 DAYS |
|
|
23
48
|
| `maps` | `{searchStringsArray:["query"], locationQuery, maxCrawledPlacesPerSearch}` | $0.01/place | 5-30 min |
|
|
24
49
|
| `email-validator` | `{emails:["a@b.com"]}` | $0.0036/email | 1-10 min |
|
|
25
50
|
| `email-finder` | `{contacts:[{first_name,last_name,domain}], autoValidateEmails, autoFindMobiles}` | $0.05/contact | 1-10 min |
|
package/bin/cli.mjs
CHANGED
|
@@ -266,21 +266,6 @@ async function main() {
|
|
|
266
266
|
break
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
// ── YouTube Email ─────────────────────────────────────
|
|
270
|
-
case 'youtube-email': {
|
|
271
|
-
let channels = args.filter(a => !a.startsWith('-'))
|
|
272
|
-
const file = flag('--file')
|
|
273
|
-
if (file) {
|
|
274
|
-
channels = [...channels, ...fs.readFileSync(file, 'utf-8').split('\n').map(l => l.trim()).filter(Boolean)]
|
|
275
|
-
}
|
|
276
|
-
if (!channels.length) die('Usage: scrapercity youtube-email @ChannelHandle https://youtube.com/@Channel OR --file channels.txt')
|
|
277
|
-
const r = await sc.youtubeEmail(channels)
|
|
278
|
-
console.log(`✓ YouTube email scrape started`)
|
|
279
|
-
console.log(` Run ID: ${r.runId}`)
|
|
280
|
-
console.log(` Poll: scrapercity status ${r.runId}`)
|
|
281
|
-
break
|
|
282
|
-
}
|
|
283
|
-
|
|
284
269
|
// ── Website Finder ────────────────────────────────────
|
|
285
270
|
case 'website-finder': {
|
|
286
271
|
let domains = args.filter(a => !a.startsWith('-'))
|
|
@@ -366,17 +351,15 @@ async function main() {
|
|
|
366
351
|
break
|
|
367
352
|
}
|
|
368
353
|
|
|
369
|
-
// ──
|
|
370
|
-
case '
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
const
|
|
374
|
-
if (
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
const r = await sc.propertyLookup(addresses, ownerContact)
|
|
379
|
-
console.log(`✓ Property lookup started for ${addresses.length} addresses`)
|
|
354
|
+
// ── Deal Finder (distressed properties) ───────────────
|
|
355
|
+
case 'distress-list': {
|
|
356
|
+
const search = args.find(a => !a.startsWith('-'))
|
|
357
|
+
if (!search) die('Usage: scrapercity distress-list "Tampa, FL" [--types preForeclosure,auction] [--max 100]')
|
|
358
|
+
const body = { search }
|
|
359
|
+
const types = flag('--types'); if (types) body.distressTypes = types.split(',').map(s => s.trim())
|
|
360
|
+
const max = flag('--max'); if (max) body.maxItems = +max
|
|
361
|
+
const r = await sc.distressList(body)
|
|
362
|
+
console.log(`✓ Deal Finder scrape started`)
|
|
380
363
|
console.log(` Run ID: ${r.runId}`)
|
|
381
364
|
console.log(` Poll: scrapercity status ${r.runId}`)
|
|
382
365
|
break
|
|
@@ -441,14 +424,13 @@ ScraperCity CLI - B2B lead generation from your terminal
|
|
|
441
424
|
scrapercity builtwith "Technology" Sites using a technology
|
|
442
425
|
scrapercity criminal --name "X" Criminal records search
|
|
443
426
|
scrapercity airbnb --city "Miami, FL" Airbnb host emails
|
|
444
|
-
scrapercity youtube-email @Channel YouTuber business emails
|
|
445
427
|
scrapercity website-finder acme.com Contact info from domains
|
|
446
428
|
scrapercity yelp -q "query" -l "City" Yelp business scraper
|
|
447
429
|
scrapercity angi -q "query" --zips X Angi (Angie's List) scraper
|
|
448
430
|
scrapercity zillow-agents -l "City" Zillow real estate agents
|
|
449
431
|
scrapercity bizbuysell <url> BizBuySell listings
|
|
450
432
|
scrapercity crexi <url> Crexi commercial real estate
|
|
451
|
-
scrapercity
|
|
433
|
+
scrapercity distress-list \"City, ST\" Distressed / motivated-seller properties
|
|
452
434
|
|
|
453
435
|
Status:
|
|
454
436
|
scrapercity status <runId> Check run status
|