1. Line-by-Line Cost Breakdown at 100,000 Places (Compute Units + Proxy GB + Rental)
Unlike a deterministic REST gateway where you pay a fixed credit count per returned JSON record, containerized browser scrapers meter underlying cloud infrastructure (RAM × execution seconds + proxy gigabytes) or bundle a 5x–10x markup into pay-per-event pricing:
- Headless Browser Compute Unit Variance ($0.30 – $0.40 per CU): 1 Compute Unit equals 1 GB RAM running for 1 hour. A 4 GB–8 GB Chromium container navigating map pins, scrolling review drawers, and retrying CAPTCHA/429 blocks consumes CUs continuously—including on sparse suburban grid cells that return zero businesses.
- Residential Proxy Bandwidth Surcharges ($8.00 – $12.50 per GB): Map tiles, XHR protobuf payloads, and SMB homepage assets weigh 50–90 KB per business when crawled via headless browser. Across 100,000 places + contact pages, 6–8 GB of residential proxy bandwidth adds $48–$95 in hidden overages.
- Monthly Subscription Expiry vs Never-Expiring PAYG: Platform starter tiers ($39/mo Starter, $199/mo Scale) forfeit unused prepaid usage credits at the end of every billing cycle, plus paid store Actors often add a separate $20–$49/month rental fee before your first scrape runs.
| Billing Layer | Cloud Scraper Metered Unit | 100,000 Places Bill (Cloud) | Empty-Cell / Retry Exposure | PlacesData API Deterministic Cost |
|---|---|---|---|---|
| Place Discovery & Profile Extraction | $2.50–$4.00 per 1,000 places (PPE) OR $0.30–$0.40 per Compute Unit | $250.00 – $400.00 per 100,000 places | Container RAM×time billed during 429 retries & cold boot | $20.00 – $50.00 per 100,000 places ($0.20–$0.50 per 1,000 places) |
| Residential Proxy Bandwidth | $8.00 – $12.50 per GB residential proxy traffic | $48.00 – $95.00 (~6–8 GB HTML/XHR) | Proxy GB billed even on blocked or 0-result grid sweeps | $0.00 per GB (proxy & PostgreSQL GiST cache included) |
| Website Email & Social Crawl | Extra CUs + proxy GB crawling /, /contact, /about | +$60.00 – $140.00 compute & proxy burn | Pays compute + proxy on dead domains & 0-email sites | $48.00 – $120.00 at 60% hit rate ($0.80–$2.00 per 1,000 hits · 0 if empty) |
| Platform Plan & Actor Rental Floor | $39.00 – $199.00 / month plan + $20 – $49 / month Actor rental | $39.00 – $88.00 / month fixed floor | Unused monthly prepaid platform credits expire in 30 days | $0.00 / month floor ($10 never-expiring PAYG or $29–$499/mo plans) |
| Total All-In 100K Enriched Pipeline | Async run queue + dataset polling (45s – 180s latency) | $397.00 – $723.00 per 100,000 leads | High bill variance across dense vs rural zip codes | $68.00 – $170.00 per 100,000 enriched leads (38ms–1.8s sync JSON) |
2. 15-Minute Migration: Cloud Dataset JSON -> PlacesData API Schema
Delete your async actor-run polling worker, webhook receiver, and dataset pagination loop. Map your existing parser fields directly to GET /v1/places/search and GET /v1/leads/enrich:
| Cloud Scraper Dataset Field | PlacesData API Field | Type & Production Example |
|---|---|---|
| title | data[].name | string · "Houndstooth Coffee" |
| placeId & cid | data[].place_id & data[].cid | string · "ChIJL9ZfURW1RIYR120Vj4oOnPg" |
| categoryName / categories | data[].category & data[].types | string / string[] · "Coffee shop" |
| address / city / state / postalCode | data[].address, city, state, zip_code | string · "401 Congress Ave, Austin, TX 78701" |
| phoneUnformatted / phone | data[].phone | string (E.164) · "+15125319417" |
| website | data[].website & data[].domain | string · "houndstoothcoffee.com" |
| totalScore & reviewsCount | data[].rating & data[].reviews_count | number · 4.7 & 1142 |
| location.{lat, lng} | data[].latitude & data[].longitude | number · 30.2662, -97.7431 |
| openingHours[] | data[].working_hours | object · {"Monday": "6:30 AM–6:00 PM", ...} |
| emails[] / linkedIns[] / instagrams[] | GET /v1/leads/enrich -> data.{emails, social_links} | array / object · 0 Credits when empty |
Replace Async Actor Polling with 1-Call Synchronous REST JSON
Zero SDK bloat, zero container boot delay, and 0 Credits charged on empty domains:
# 1) Synchronous place search (5 Credits / place returned; 0 if empty)
curl -sS "https://api.placesdataapi.com/v1/places/search?q=roofing+contractors+in+Dallas+TX&limit=20" \
-H "x-api-key: pd_live_your_api_key"
# 2) Optional domain email & social link enrichment (20 Credits/hit; 0 Credits if none found)
curl -sS "https://api.placesdataapi.com/v1/leads/enrich?domain=houndstoothcoffee.com" \
-H "x-api-key: pd_live_your_api_key"import os
import requests
API_KEY = os.getenv("PLACESDATAAPI_KEY", "pd_live_your_api_key")
HEADERS = {"x-api-key": API_KEY}
# Replaces async actor.call() + dataset.iterate_items() with a <1.8s HTTP GET
resp = requests.get(
"https://api.placesdataapi.com/v1/places/search",
headers=HEADERS,
params={"q": "roofing contractors in Dallas TX", "limit": 20},
timeout=15,
)
resp.raise_for_status()
for place in resp.json()["data"]:
domain = place.get("domain")
contacts = (
requests.get(
"https://api.placesdataapi.com/v1/leads/enrich",
headers=HEADERS,
params={"domain": domain},
timeout=15,
).json()["data"]
if domain
else {}
)
print(place["name"], place.get("phone"), contacts.get("emails", []))const headers = { "x-api-key": process.env.PLACESDATAAPI_KEY ?? "pd_live_your_api_key" };
// Sub-second cached / <1.8s live response — safe inside Next.js routes, Clay & n8n HTTP nodes
const searchRes = await fetch(
"https://api.placesdataapi.com/v1/places/search?q=roofing+contractors+in+Dallas+TX&limit=20",
{ headers }
);
const { data: places } = await searchRes.json();
const enriched = await Promise.all(
places.filter((p) => p.domain).slice(0, 5).map(async (p) => {
const r = await fetch(
`https://api.placesdataapi.com/v1/leads/enrich?domain=${encodeURIComponent(p.domain)}`,
{ headers }
);
return { name: p.name, phone: p.phone, contacts: (await r.json()).data };
})
);
console.log(enriched);{
"code": 0,
"provider": "https://placesdataapi.com",
"status": "ok",
"msg": "success",
"data": [
{
"place_id": "ChIJL9ZfURW1RIYR120Vj4oOnPg",
"cid": "17914209406041812439",
"name": "Black Cat Coffee",
"category": "Coffee shop",
"phone": "+1650-640-6906",
"website": "https://blkcatcoffee.com/",
"domain": "blkcatcoffee.com",
"rating": 5,
"reviews_count": 151,
"address": "603 W Live Oak St, Austin, TX 78704",
"latitude": 30.2444179,
"longitude": -97.7580971
}
],
"meta": {
"request_id": "1307debc-36de-4bb5-955f-1d157e60de30",
"endpoint": "/v1/places/search",
"count": 1,
"credits_charged": 5,
"took_ms": 38
}
}3. Why Sub-2s Synchronous Latency Matters for Clay, n8n & AI Agents
Containerized scrapers were designed for offline batch exports, not real-time GTM automation or conversational AI tool calls:
- Clay & n8n HTTP Action Compatibility: Standard HTTP Request nodes in Clay, Make, and Zapier time out after 30 seconds. PlacesData API responds synchronously in 38ms (warm cache) to 1.4s (live SERP) with up to 600 RPM (15 RPS) concurrency (1,000+ RPM Dedicated Enterprise Key Pool available)—zero webhook glue code required.
- 1-Click Remote MCP for Claude & ChatGPT: Connect https://mcp.placesdataapi.com/v1/mcp via OAuth 2.1 PKCE or https://api.placesdataapi.com/mcp via API key so AI SDRs can search places, read customer reviews, and enrich B2B emails mid-chat.
Interactive Engineering Workbench · Drop-In Migration
Verify real-time latency, credit math & JSON schema
Frequently Asked Questions
- Why do cloud scraper Compute Unit bills spike on rural or sparse zip-code grids?
- Headless browser containers bill RAM × execution seconds plus proxy traffic while loading map viewports even when a zip code contains zero matching businesses. PlacesData API bills strictly per returned place (5 Credits/place) and deducts 0 Credits on 0-result queries.
- Do I have to pay a monthly Actor rental or forfeit unused monthly credits?
- No. PlacesData API has zero Actor rental fees, and one-time Pay-As-You-Go packs ($10, $50, $100, $500) never expire. Monthly plans ($29–$499/mo) are optional for high-volume teams wanting +20% to +150% bonus credits ($0.20/1K places on Business).
- How fast can I test my existing queries before migrating?
- Run 3 instant live queries with zero login in our homepage Playground (/#playground), or sign in with Google in 1 click at /signup for $1.20 (12,000 Free Credits — enough for 2,400 places) with no credit card required.