Web scraping from
the command line
No model in the loop, just a command you call from a shell, a cron line or a CI step. It returns JSON and an exit code, and gets out of the way.
1,000 free credits. No credit card required.
| Stouthaus Coffee - Sunset Valley | (512) 721-0030 | 4.6 (772) |
| Terrible Love | — | 4.9 (417) |
| Hometown Coffee - East Austin | — | 4.9 (77) |


Install one file. Set one key.
Every HasData API is a subcommand of one static binary, and the flags come from that API’s own schema, so there is no CLI dialect to learn. Each command answers on stdout in JSON, so a shell script or any other language reads it directly.
.zip from the releases page, unpack, add hasdata.exe to %PATH%.
The site changes. The command doesn't.
The flags are generated from each API's own parameters, so there is no CLI dialect to learn on top.
Search, retail, property, jobs. One CLI for all of it.
Run hasdata --help and the whole list prints in your terminal. Each command's help carries its endpoint and the price of one call in credits.
Search, every surface of it
The Google results page, Light SERP, AI Mode, AI Overview, News, Shopping, Images, Events and short videos. Plus Bing and Trends.
Businesses, phone included
Google Maps places, reviews, author reviews, photos and posts. Plus Yelp and YellowPages.
Homes, stays and fares
Zillow, Redfin, Airbnb, Booking, Google Hotels, Google Flights.
Products and their sellers
Amazon search, product, seller and seller inventory. Plus Shopify.
Channels, posts and transcripts
YouTube search, video, channel and transcript. TikTok profile, posts and keyword search. Instagram.
Openings and employers
Indeed for the openings, Glassdoor for the employers behind them.
Anything with a URL
Any public URL through the web-scraping command. Markdown for reading, or name the fields and get typed JSON. A site we don't parse out of the box is a custom scraper away.
1,000 free credits is a finished job.
Free
Startup
Business
RecommendedGrowth
Monthly credit volume
Custom price based on required volume
Past 100M credits a month, or terms the self-serve plans do not cover. We shape the contract around your workload.
How do I scrape a website from the command line?
Install the binary with curl -sSL .../install.sh | sh or brew install hasdata, run hasdata configure once to store the key, then call the command for the source you need. hasdata google-maps --q "coffee shop" --ll "@30.2672,-97.7431,13z" prints parsed JSON on stdout, so jq or any script reads it straight from the pipe. Proxies, rendering and parsing run on HasData’s side.
Is the binary free?
Yes. The tool costs nothing. Install it, read the source, script against it. Credits only start moving when a command fetches data, and you start with 1,000 free, no card.
What does a call cost?
Each command prints its own price. hasdata google-maps --help reads Cost: 5 credits per call. Web scraping is the one worth reading twice, because its help shows 10 for a rendered page while a plain read with no JS and a datacenter proxy costs 1. Specialized endpoints run up to 15, at the same rates as calling the API directly.
How many calls can I run in parallel?
One on the free tier, so a loop over a file runs sequentially. Paid plans start at 15 concurrent requests. Past your limit the API answers 429, and the CLI retries twice by default before it gives up. Failed calls are never charged.
Does the key have to sit in a file?
No. hasdata configure writes it to ~/.hasdata/config.yaml with 0600 permissions, but a flag beats the environment and the environment beats the file, so CI never needs the file at all. With no key anywhere the CLI stops before the network with error: no API key configured and exit code 1. A wrong key gets you 401 and exit code 3.
Can a script tell a refusal from a mistake?
The exit code says which. 1 means your flags are wrong, 3 means the API refused the call. Failed calls are never charged, so a script that exits 3 has spent nothing.
Does it update itself?
Only when you say so. hasdata update --check looks for a new release, hasdata update installs it. The CLI checks daily and notifies via stderr. It never updates without your consent.
When would I want the MCP server instead?
When a model should pick the tool. The CLI is for the opposite case, where you already know the call, and it runs from a shell, cron or CI with no model in the loop. Same endpoints, same balance either way.
All integrations · The MCP server for the agent-driven case. The same binary also powers the Claude Code plugin and the OpenClaw and hasdata-cli agent skills.
One command away.
Web scraping from the command line, minus the infrastructure. No headless browsers, no proxy pools, no parsers to maintain, just JSON on stdout.
One binary · 1,000 free credits · no card