Extract Public Web Data via API
Cloud web-data extraction via HasData's API: scraper APIs, arbitrary web scraping, and async scraper jobs.
Why it matters
Leverage a unified API to extract structured data from public websites, including search engine results, e-commerce listings, and local business information.
Outcomes
What it gets done
Scrape arbitrary URLs with JS rendering and CSS/AI extraction.
Access pre-parsed JSON data for platforms like Google, Amazon, and Zillow.
Perform bulk data extraction and recursive crawling via asynchronous jobs.
Gather business contact details from Maps and other public sources.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-hasdata | bash Overview
HasData
Provides cloud web-data extraction through one API key and three modes: scraper APIs for known platforms, arbitrary web scraping, and async scraper jobs with webhook fan-out. Use it when a task needs web scraping, search results, structured data extraction, or ecommerce, travel, jobs, or local-business data.
What it does
Provides a cloud platform for extracting public web data through one API key and three execution modes: a Web Scraping API for arbitrary URLs (JS rendering, CSS/AI extraction, screenshots, seconds latency), Scraper APIs for known platforms like Google, Amazon, or Zillow (pre-parsed JSON, no selector maintenance), and async Scraper Jobs for bulk or recursive extraction with webhook fan-out (minutes-to-hours latency). Its decision rule: default to a Scraper API when one exists for the platform, use Web Scraping for arbitrary URLs, and reach for a Scraper Job only when no API equivalent exists - crawler, contacts, SEC EDGAR, Amazon bestsellers or reviews - or when async fan-out saves real engineering time over a paginated client loop.
curl -G 'https://api.hasdata.com/scrape/google/serp' \
--data-urlencode 'q=coffee' \
-H 'x-api-key: <your-api-key>'
Every response wraps in a consistent shape with requestMetadata.status, and only "ok" counts as valid - an HTTP 200 alone isn't enough. Client-side wiring matters: set a timeout of at least 300 seconds to match HasData's own server deadline, since shorter clients see phantom failures while still getting billed on completion, retry only on 429/5xx with exponential backoff and jitter, cap concurrency at the plan limit, and persist the async job's body.id (an integer, not jobId) immediately, polling every 10-30 seconds since webhooks are best-effort with only three retries.
When to use - and when NOT to
Use it when a task needs web scraping, search-engine results, structured data extraction, or ecommerce, travel, jobs, or local-business data. It explicitly scopes personal contact lookups (email, phone) to legitimate, authorized purposes with opt-out and privacy-law constraints, not open-ended people-search.
Inputs and outputs
Input: a target URL or platform-specific query - Google SERP, Amazon product, Zillow listing, Google Maps search - or a bulk-crawl job spec. Output: pre-parsed or freshly scraped JSON, or markdown/CSV/XLSX for jobs, always validated by the requestMetadata.status field rather than HTTP status alone.
Integrations
Authenticates via an x-api-key header, read from HASDATA_API_KEY and never hardcoded or logged, against api.hasdata.com. Ships topic-specific reference docs (web scraping, search, ecommerce, real estate, travel, local business, jobs, YouTube, scraper jobs) and ready-to-paste Python and TypeScript client recipes with retry, backoff, and job-polling logic already built in.
Who it's for
Developers building on public web data - scraping, SERP, ecommerce, or bulk crawling - who want pre-parsed platform APIs first and raw scraping only as a fallback.
Common gotchas it calls out: disable jsRendering first since most static pages parse fine without a headless browser, cookies pass through a headers["Cookie"] field rather than a dedicated cookies parameter, and includePaths regex matching is case-sensitive.
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.