hasdata-cli — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hasdata-cli (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use the hasdata CLI for real-time web data. One subcommand per API — flags, enums, defaults are derived from the live schema at api.hasdata.com/apis.
Use this skill when:
command -v hasdata — if missing, download the installer from https://raw.githubusercontent.com/HasData/hasdata-cli/main/install.sh, inspect it, then run it locally with sh install.sh.hasdata configure, pastes their API key, and it's saved to ~/.hasdata/config.yaml (mode 0600). Every future call picks it up automatically.no API key configured, the user hasn't run hasdata configure yet — tell them to. Never invent a key.hasdata <api> --flag value [--flag value ...] --raw | jq .Always pass --raw when piping to jq (skips pretty-print and TTY detection). Use --pretty only for human-readable terminal output.
| User intent | Subcommand |
|---|---|
| Web search ("what does Google say about…") | google-serp (full features) or google-serp-light (cheap, single page) |
| Latest news | google-news |
| AI Mode SERP | google-ai-mode |
| Shopping / product prices | google-shopping (broad), amazon-search / amazon-product (Amazon), shopify-products (Shopify) |
| Immersive product page | google-immersive-product |
| Maps / places / reviews | google-maps, google-maps-place, google-maps-reviews, google-maps-photos, google-maps-posts |
| Yelp / YellowPages local data | yelp-search, yelp-place, yellowpages-search, yellowpages-place |
| Real-estate listings (homes for sale/rent/sold) | zillow-listing, redfin-listing |
| Real-estate single property deep dive | zillow-property, redfin-property |
| Travel — short-term rentals | airbnb-listing, airbnb-property |
| Travel — hotels / lodging | booking-search, booking-place |
| Travel — flights | google-flights |
| Jobs | indeed-listing, indeed-job, glassdoor-listing, glassdoor-job |
| Bing search | bing-serp |
| Trends | google-trends |
| Images | google-images |
| Short videos | google-short-videos |
| Events | google-events |
| YouTube search / video / channel / transcript | youtube-search-api, youtube-video-api, youtube-channel-api, youtube-transcript-api |
| Instagram profile | instagram-profile |
| Amazon seller | amazon-seller, amazon-seller-products |
| Scrape a specific URL | web-scraping — supports JS rendering, proxies, markdown output, AI extraction, screenshots |
For exact flags of a subcommand, run hasdata <api> --help or read the matching file in references/.
The user often won't ask for a SERP API or a scraper directly. Map these intents to the skill:
google-serp or google-news to ground the answer.web-scraping --output-format markdown and feed the markdown into the summary prompt. Beats copy-paste because it strips ads, nav, scripts.web-scraping --url X --no-block-resources returns status + screenshot. Or google-serp --q "site:example.com".web-scraping --output-format markdown, then summarize.google-serp --q "X alternatives" or google-shopping --q "X competitors".google-shopping (broad) or amazon-search (Amazon-specific) with jq to extract the price distribution.google-maps-place or yelp-place. Don't guess from training data.google-maps-reviews --place-id ... --sort lowest for negative samples; glassdoor-job for employer rep.indeed-listing filtered by role + location, then jq over .jobs[].salary.zillow-listing / redfin-listing / airbnb-listing with the corresponding filters.zillow-listing --type sold --keyword "X" --days-on-zillow 12m.amazon-product --asin X on a schedule; persist .price to a file.youtube-transcript-api --v-param VID --raw | jq -r '.transcript[].snippet' → feed to the sum~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.