scrapercity 1.0.19 → 1.0.20
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 +6 -0
- package/SKILL.md +2 -2
- package/bin/cli.mjs +6 -2
- package/bin/mcp.mjs +7 -2
- package/lib/catalog.generated.mjs +2 -2
- package/package.json +1 -1
package/AGENT_DOCS.txt
CHANGED
|
@@ -193,6 +193,10 @@ GET /api/v1/database/leads?title=CTO&country=United States&hasEmail=true&page=1&
|
|
|
193
193
|
Company filters: keywords (company tags, whole-word, any match), revenueMin, revenueMax (USD),
|
|
194
194
|
companyCountry, companyState, companyCity (company HQ, not the person)
|
|
195
195
|
Exclusions: notTitle, notKeywords, notIndustry
|
|
196
|
+
Website technologies (repeat the parameter for several): technologies (runs any of),
|
|
197
|
+
technologiesAll (runs all of), notTechnologies (runs none of). E.g. companies on
|
|
198
|
+
Klaviyo, PayPal and Shopify without Facebook Pixel:
|
|
199
|
+
technologiesAll=Klaviyo&technologiesAll=PayPal&technologiesAll=Shopify¬Technologies=Facebook%20Pixel
|
|
196
200
|
url=<people-search URL>: use that search's filters (other params override).
|
|
197
201
|
The response adds search_translation: { applied, approximated, not_supported }.
|
|
198
202
|
A URL with no filters the database can use returns 400.
|
|
@@ -251,6 +255,8 @@ GET /api/v1/database/local-businesses?category=Dentist&country=US&hasContact=tru
|
|
|
251
255
|
|
|
252
256
|
GET /api/v1/database/ecommerce?...
|
|
253
257
|
Same pattern (including excludeDelivered and after), different dataset.
|
|
258
|
+
Technologies: technologies (runs any of), technologiesAll (runs all of), notTechnologies
|
|
259
|
+
(runs none of), each repeatable, e.g. technologiesAll=Klaviyo&technologiesAll=PayPal¬Technologies=Facebook%20Pixel
|
|
254
260
|
|
|
255
261
|
POST /api/v1/database/plan { "query": "dentists in Austin", "database": "local" }
|
|
256
262
|
(or GET /api/v1/database/plan?query=...&database=...)
|
package/SKILL.md
CHANGED
|
@@ -78,9 +78,9 @@ Apollo scrapes take **up to 4 days** to deliver. Do NOT poll in a loop.
|
|
|
78
78
|
| POST | `/api/v1/scrape/cancel/{runId}` | Cancel running job |
|
|
79
79
|
| GET | `/api/v1/scrape/logs/{runId}` | Run logs |
|
|
80
80
|
| GET | `/api/v1/apollo-status` | Apollo service health: `{status: "url-based" or "legacy", message, timestamp}` |
|
|
81
|
-
| 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`. `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`) |
|
|
81
|
+
| 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`) |
|
|
82
82
|
| 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` |
|
|
83
|
-
| GET | `/api/v1/database/ecommerce?...` | Ecommerce DB ($149/mo plan and up). Same optional `excludeDelivered` / `after` |
|
|
83
|
+
| 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) |
|
|
84
84
|
| 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>` |
|
|
85
85
|
|
|
86
86
|
## Status Values
|
package/bin/cli.mjs
CHANGED
|
@@ -380,10 +380,13 @@ async function main() {
|
|
|
380
380
|
'--keywords': 'keywords', '--revenue-min': 'revenueMin', '--revenue-max': 'revenueMax',
|
|
381
381
|
'--company-country': 'companyCountry', '--company-state': 'companyState',
|
|
382
382
|
'--company-city': 'companyCity', '--not-title': 'notTitle',
|
|
383
|
-
'--not-keywords': 'notKeywords', '--not-industry': 'notIndustry'
|
|
383
|
+
'--not-keywords': 'notKeywords', '--not-industry': 'notIndustry',
|
|
384
|
+
'--technologies': 'technologies', '--technologies-all': 'technologiesAll',
|
|
385
|
+
'--not-technologies': 'notTechnologies' }
|
|
384
386
|
// List filters take commas: --country "United States,Canada" sends both.
|
|
385
387
|
const lists = new Set(['--industry', '--country', '--state', '--seniority', '--department',
|
|
386
|
-
'--company-country', '--company-state', '--not-industry'
|
|
388
|
+
'--company-country', '--company-state', '--not-industry',
|
|
389
|
+
'--technologies', '--technologies-all', '--not-technologies'])
|
|
387
390
|
for (const f of Object.keys(keyFor)) {
|
|
388
391
|
const v = flag(f)
|
|
389
392
|
if (v === undefined) continue
|
|
@@ -517,6 +520,7 @@ ScraperCity CLI - B2B lead generation from your terminal
|
|
|
517
520
|
--min-employees --max-employees --has-email --has-phone
|
|
518
521
|
--keywords --revenue-min --revenue-max --company-country --company-state --company-city
|
|
519
522
|
--not-title --not-keywords --not-industry
|
|
523
|
+
--technologies --technologies-all --not-technologies Website technologies: any of / all of / none of (comma separated)
|
|
520
524
|
--url "<people-search URL>" Search with that URL's filters
|
|
521
525
|
--exclude-delivered Only leads you don't already have
|
|
522
526
|
--after <id> Cursor paging (start with 0, then use the printed next id)
|
package/bin/mcp.mjs
CHANGED
|
@@ -58,7 +58,7 @@ const UTILITY_TOOLS = [
|
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
name: 'query_lead_database',
|
|
61
|
-
description: 'Query the B2B lead database directly. Returns contacts with names, emails, phones, titles, companies (plus company website, revenue, HQ location and keywords). Up to 100 per request. Included with the $149/mo plan (100,000 new leads a day; leads you already have do not count again). For a daily pull of only new leads set excludeDelivered=true. For big pulls page with after: send after="0" first, then the pagination.next_after from each response until it is null. Have a saved people-search URL? Pass it as url to search with its filters right away (search_translation in the response says what was applied).',
|
|
61
|
+
description: 'Query the B2B lead database directly. Returns contacts with names, emails, phones, titles, companies (plus company website, revenue, HQ location and keywords). Up to 100 per request. Included with the $149/mo plan (100,000 new leads a day; leads you already have do not count again). For a daily pull of only new leads set excludeDelivered=true. For big pulls page with after: send after="0" first, then the pagination.next_after from each response until it is null. Have a saved people-search URL? Pass it as url to search with its filters right away (search_translation in the response says what was applied). Target by the technologies a company\'s website runs: technologies (any of), technologiesAll (all of), notTechnologies (none of), e.g. technologiesAll ["Klaviyo", "PayPal", "Shopify"] with notTechnologies ["Facebook Pixel"].',
|
|
62
62
|
inputSchema: { type: 'object', properties: {
|
|
63
63
|
url: { type: 'string', description: 'A people-search URL (the address of a people search with its filters). Its filters become the search; any other filter you pass overrides the matching one.' },
|
|
64
64
|
title: { type: 'string', description: 'Job title filter, comma separated for several (partial match, e.g. "CEO, Founder")' },
|
|
@@ -81,6 +81,9 @@ const UTILITY_TOOLS = [
|
|
|
81
81
|
notTitle: { type: 'string', description: 'Exclude titles containing any of these (comma separated)' },
|
|
82
82
|
notKeywords: { type: 'array', items: { type: 'string' }, description: 'Exclude companies with any of these keywords' },
|
|
83
83
|
notIndustry: { type: 'array', items: { type: 'string' }, description: 'Exclude these industries' },
|
|
84
|
+
technologies: { type: 'array', items: { type: 'string' }, description: 'Companies whose website runs ANY of these technologies, e.g. ["HubSpot"]' },
|
|
85
|
+
technologiesAll: { type: 'array', items: { type: 'string' }, description: 'Companies whose website runs ALL of these technologies, e.g. ["Klaviyo", "PayPal"] (keep it to 1-3)' },
|
|
86
|
+
notTechnologies: { type: 'array', items: { type: 'string' }, description: 'Leave out companies whose website runs any of these technologies, e.g. ["Facebook Pixel"]' },
|
|
84
87
|
socialUrl: { type: 'string', description: 'Match a social profile URL' },
|
|
85
88
|
hasEmail: { type: 'boolean', description: 'Only contacts with email' },
|
|
86
89
|
hasPhone: { type: 'boolean', description: 'Only contacts with phone' },
|
|
@@ -122,7 +125,7 @@ const UTILITY_TOOLS = [
|
|
|
122
125
|
},
|
|
123
126
|
{
|
|
124
127
|
name: 'query_ecommerce_database',
|
|
125
|
-
description: 'Query the ecommerce store database directly. Returns online stores with platform, estimated monthly sales and visits, employee count, emails, phones and social links. Up to 100 per request. Included with the $149/mo plan (100,000 new stores a day; stores you already have do not count again). For a daily pull of only new stores set excludeDelivered=true. For big pulls page with after: send after="0" first, then the pagination.next_after from each response until it is null.',
|
|
128
|
+
description: 'Query the ecommerce store database directly. Returns online stores with platform, estimated monthly sales and visits, employee count, emails, phones and social links. Up to 100 per request. Included with the $149/mo plan (100,000 new stores a day; stores you already have do not count again). For a daily pull of only new stores set excludeDelivered=true. For big pulls page with after: send after="0" first, then the pagination.next_after from each response until it is null. Combine technologies (any of), technologiesAll (all of) and notTechnologies (none of) for exact targeting, e.g. technologiesAll ["Klaviyo", "PayPal"] with notTechnologies ["Facebook Pixel"].',
|
|
126
129
|
inputSchema: { type: 'object', properties: {
|
|
127
130
|
platform: { type: 'array', items: { type: 'string' }, description: 'Ecommerce platforms, e.g. ["shopify", "woocommerce"] (any match)' },
|
|
128
131
|
country: { type: 'array', items: { type: 'string' }, description: 'Two-letter country codes, e.g. ["US"]' },
|
|
@@ -132,6 +135,8 @@ const UTILITY_TOOLS = [
|
|
|
132
135
|
merchant: { type: 'string', description: 'Merchant name (partial match)' },
|
|
133
136
|
domain: { type: 'string', description: 'Store domain(s), comma or space separated' },
|
|
134
137
|
technologies: { type: 'array', items: { type: 'string' }, description: 'Technologies the store uses (any match)' },
|
|
138
|
+
technologiesAll: { type: 'array', items: { type: 'string' }, description: 'Stores that run ALL of these technologies, e.g. ["Klaviyo", "PayPal"]' },
|
|
139
|
+
notTechnologies: { type: 'array', items: { type: 'string' }, description: 'Leave out stores that run any of these technologies, e.g. ["Facebook Pixel"]' },
|
|
135
140
|
planExclude: { type: 'array', items: { type: 'string' }, description: 'Exclude stores on these plan tiers, e.g. ["Shopify Plus"]' },
|
|
136
141
|
salesMin: { type: 'number', description: 'Minimum estimated monthly sales, USD' },
|
|
137
142
|
salesMax: { type: 'number', description: 'Maximum estimated monthly sales, USD' },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// AUTO-GENERATED by scripts/generate.mjs — DO NOT EDIT BY HAND.
|
|
2
2
|
// Source of truth: scraperConfigs.ts (+ src/config/scrapers.ts). Regenerate: npm run generate
|
|
3
|
-
// Generated: 2026-10-
|
|
3
|
+
// Generated: 2026-10-20T21:18:28.662Z
|
|
4
4
|
export const TOOLS = [
|
|
5
5
|
{
|
|
6
6
|
"name": "scrape_apollo",
|
|
@@ -542,7 +542,7 @@ export const TOOLS = [
|
|
|
542
542
|
"properties": {
|
|
543
543
|
"technology": {
|
|
544
544
|
"type": "string",
|
|
545
|
-
"description": "Technology name to search for (e.g., WordPress, Shopify, HubSpot)"
|
|
545
|
+
"description": "Technology name to search for (e.g., WordPress, Shopify, HubSpot, Klaviyo). Any technology in the Tech Stack Scraper's list, including the store apps the E-commerce Database tracks."
|
|
546
546
|
},
|
|
547
547
|
"fileName": {
|
|
548
548
|
"type": "string",
|