Skip to content
Skillpedia
Web scraping48k · #3181

hasdata

Helps your agent gather information from the internet. It's useful for collecting data from websites that don't offer direct downloads.

What it does

This tool fetches information from websites on the internet for you. It can extract specific data from web pages or search results.

When to use it

  • ✓When you need to collect information from a specific website.
  • ✓When you want to see Google search results about a topic.
  • ✓When you need organized data from online stores, real estate, or job listings.

Example of what to ask your AI

“Find the top 5 best-selling products on Amazon for 'coffee makers'.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/hasdata/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/hasdata/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

You tell it which website or search you want to analyze, and the tool goes there to bring back the data you requested in an organized way.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill hasdata

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/hasdata/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

HasData

Cloud platform for extracting public web data. One API key, three execution modes. All endpoints sit under https://api.hasdata.com and authenticate with x-api-key.

curl -G 'https://api.hasdata.com/scrape/google/serp' \
  --data-urlencode 'q=coffee' \
  -H 'x-api-key: <your-api-key>'

401 invalid key, 403 quota exhausted, 429 concurrency cap, 500 server error (retry).

When to Use

Use this skill when:

  • The user needs web scraping.
  • The user needs search engine results.
  • The user needs structured data extraction.
  • The user needs ecommerce, travel, jobs, or local business data.
  • The user explicitly asks about HasData.

Three execution modes

Mode Latency When Endpoint
Web Scraping API seconds Arbitrary URL — JS rendering, CSS/AI extraction, screenshots POST /scrape/web
Scraper APIs (sync) seconds Pre-parsed JSON for known platforms (Google, Amazon, Zillow, …) GET /scrape/<vertical>/<resource>
Scraper Jobs (async) minutes–hours Bulk extraction, recursive crawling, webhook fan-out POST /scrapers/<slug>/jobs

Decision rule. Default to a Scraper API when one exists for the platform (pre-parsed JSON, no selector maintenance). Use Web Scraping for arbitrary URLs not covered by an API. Reach for a Scraper Job only when no API equivalent exists — crawler, contacts, sec-edgar, amazon-bestsellers, amazon-product-reviews — or when async fan-out + webhooks save engineering time over a paginated client loop.

Always-true response shape

{ "requestMetadata": { "id": "…", "status": "ok", "url": "…" }, "...": "endpoint-specific" }

Treat data as valid only if requestMetadata.status === "ok". HTTP 200 alone isn't enough.

High-leverage patterns

  • SERP-first enrichment. Google SERP can surface public snippets for company and professional-profile lookup. Use it for business or authorized research, avoid unnecessary direct scraping, and treat personal email/phone lookup as allowed only with a legitimate purpose and user authorization.
  • AI Mode + verify. /scrape/google/ai-mode for the answer + references → /scrape/web (markdown) on each reference URL → cited RAG context, no vector DB.
  • Maps → leads. /scrape/google-maps/search returns business websites and phones; collect contact details only from public, permitted sources and apply opt-out, rate, and privacy-law constraints before any outreach use.
  • Crawler → corpus. crawler Scraper Job with outputFormat: ["markdown"] + includePaths: "/docs/.+" produces an LLM-ready corpus in one submission.
  • Pre-extracted via SERP rich snippets. knowledgeGraph, localResults, inlineShoppingResults, relatedQuestions carry pre-parsed public facts. Always check them before considering direct page access.

When to call from code (the wiring)

  • Auth: x-api-key header on every request. Read from HASDATA_API_KEY env. Never hardcode, never log.
  • Timeouts: set client timeout ≥ 300 s. HasData's own deadline is 300 s; shorter clients produce phantom failures while still being billed on completion.
  • Retries: 429 and 5xx only — exponential backoff, jitter. Never retry 4xx (auth, validation).
  • Concurrency: cap at your plan limit. The free tier is 1; anything higher just generates 429s.
  • Async jobs: the submit response handle is body.id (integer), not jobId. Persist it immediately. Poll GET /scrapers/jobs/<id> every 10–30 s with backoff; treat webhooks as best-effort and always pair with polling. On finished the status carries data: {csv, json, xlsx} short-lived URLs — download immediately.

See references/code-recipes.md for ready-to-paste Python and TypeScript clients with retry, backoff, bounded concurrency, and the full job lifecycle.

Common gotchas

  • 300 s server deadline. Match client timeout.
  • Disable jsRendering first, enable only if the page needs it — most static pages parse fine without a headless browser.
  • No cookies parameter — cookies go through headers["Cookie"].
  • includePaths regex is case-sensitive. /blog/.+ won't match /Blog/....
  • Scraper Job data is double-wrapped. Each row is body.data[i].data; outer wraps with id, jobId, dataId, createdAt, updatedAt.
  • requestMetadata.status === "ok" is the only success signal. HTTP 200 alone isn't enough.

…

FAQ

How does the tool know the information it got is valid?

The tool checks if the request was completed successfully. It only considers the information valid if everything went as expected.

Can I search for any information on any website?

The tool is good at fetching public data from popular sites like Google, Amazon, and others. It might not work for very specific or protected websites.

Does it take a long time to fetch information?

It depends. Fetching search results is fast. Collecting a lot of data from multiple sites can take longer, sometimes hours.

Details

Original description by the author

Use HasData APIs for web scraping and structured web data extraction.

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#3181
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills