scrapercity 1.0.17 → 1.0.18

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/bin/mcp.mjs CHANGED
@@ -111,6 +111,36 @@ const UTILITY_TOOLS = [
111
111
  excludeDelivered: { type: 'boolean', description: 'Skip businesses this account already has (from the API or unlocked in the dashboard). With this on, keep page at 1 or use after.' },
112
112
  after: { type: 'string', description: 'Cursor paging: return businesses after this id. Use "0" to start, then the pagination.next_after from each response.' }
113
113
  } }
114
+ },
115
+ {
116
+ name: 'query_ecommerce_database',
117
+ 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.',
118
+ inputSchema: { type: 'object', properties: {
119
+ platform: { type: 'array', items: { type: 'string' }, description: 'Ecommerce platforms, e.g. ["shopify", "woocommerce"] (any match)' },
120
+ country: { type: 'array', items: { type: 'string' }, description: 'Two-letter country codes, e.g. ["US"]' },
121
+ state: { type: 'string', description: 'State (partial match)' },
122
+ city: { type: 'string', description: 'City (partial match)' },
123
+ category: { type: 'array', items: { type: 'string' }, description: 'Store categories (any match)' },
124
+ merchant: { type: 'string', description: 'Merchant name (partial match)' },
125
+ domain: { type: 'string', description: 'Store domain(s), comma or space separated' },
126
+ technologies: { type: 'array', items: { type: 'string' }, description: 'Technologies the store uses (any match)' },
127
+ planExclude: { type: 'array', items: { type: 'string' }, description: 'Exclude stores on these plan tiers, e.g. ["Shopify Plus"]' },
128
+ salesMin: { type: 'number', description: 'Minimum estimated monthly sales, USD' },
129
+ salesMax: { type: 'number', description: 'Maximum estimated monthly sales, USD' },
130
+ visitsMin: { type: 'number', description: 'Minimum estimated monthly visits' },
131
+ visitsMax: { type: 'number', description: 'Maximum estimated monthly visits' },
132
+ employeesMin: { type: 'number', description: 'Minimum employee count' },
133
+ employeesMax: { type: 'number', description: 'Maximum employee count' },
134
+ hasEmail: { type: 'boolean', description: 'Only stores with an email address' },
135
+ hasPhone: { type: 'boolean', description: 'Only stores with a phone number' },
136
+ hasInstagram: { type: 'boolean', description: 'Only stores with Instagram' },
137
+ hasFacebook: { type: 'boolean', description: 'Only stores with Facebook' },
138
+ hasTiktok: { type: 'boolean', description: 'Only stores with TikTok' },
139
+ page: { type: 'number', description: 'Page number (default 1)', default: 1 },
140
+ limit: { type: 'number', description: 'Results per page (max 100)', default: 50 },
141
+ excludeDelivered: { type: 'boolean', description: 'Skip stores this account already has (from the API or unlocked in the dashboard). With this on, keep page at 1 or use after.' },
142
+ after: { type: 'string', description: 'Cursor paging: return stores after this id. Use "0" to start, then the pagination.next_after from each response.' }
143
+ } }
114
144
  }
115
145
  ]
116
146
 
@@ -156,6 +186,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
156
186
  result = await sc.dbLocalBusinesses(params)
157
187
  break
158
188
  }
189
+ case 'query_ecommerce_database': {
190
+ const params = { ...args }
191
+ for (const k of ['hasEmail', 'hasPhone', 'hasInstagram', 'hasFacebook', 'hasTiktok', 'excludeDelivered']) {
192
+ if (params[k]) params[k] = 'true'
193
+ else delete params[k]
194
+ }
195
+ if (params.after !== undefined && params.after !== null) params.after = String(params.after)
196
+ result = await sc.dbEcommerce(params)
197
+ break
198
+ }
159
199
  default:
160
200
  return { content: [{ type: 'text', text: `Unknown tool: ${name}` }], isError: true }
161
201
  }
@@ -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-09T16:22:32.237Z
3
+ // Generated: 2026-10-18T15:59:27.714Z
4
4
  export const TOOLS = [
5
5
  {
6
6
  "name": "scrape_apollo",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrapercity",
3
- "version": "1.0.17",
3
+ "version": "1.0.18",
4
4
  "description": "ScraperCity CLI & MCP Server - B2B lead generation for AI agents",
5
5
  "type": "module",
6
6
  "bin": {