Business Website Scraper: Name, Contact and Tech Stack avatar

Business Website Scraper: Name, Contact and Tech Stack

Pricing

from $5.00 / 1,000 business returneds

Go to Apify Store
Business Website Scraper: Name, Contact and Tech Stack

Business Website Scraper: Name, Contact and Tech Stack

Given a domain, returns one validated business profile: business name and its source, published contact details, and detected technology platforms with evidence. Pay $0.005 per business returned; errors and blocked pages are free.

Pricing

from $5.00 / 1,000 business returneds

Rating

0.0

(0)

Developer

Agent Harbor LLC

Agent Harbor LLC

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Security

Limited permissions

Share

One row per business domain with the business name and where it was read from, the contact details the site publishes, and the technology platforms it runs, each with the evidence it was detected from. Every platform claim is checked against its own evidence before you see it, and unsupported claims are struck.

What it does

Give it business domains and it returns, for each one:

  • the business name and the page element it came from (for example og:site_name),
  • the contact details the site publishes, with a confidence and the evidence (fields are null when the site shows none),
  • the technology platforms the site runs (email marketing, analytics, SEO tags and more), each with category, confidence, detection method and evidence,
  • a validation result for the profile.

You pay only for businesses returned with a validated profile. Invalid domains, dead or blocked sites, timeouts and anything that fails the check are listed in the dataset with the reason, and are free. There is no AI in the scrape itself.

Who it's for

  • Sales and lead-qualification teams that need a clean name, contact and tech stack for a list of domains.
  • Agencies that want to know which platforms a prospect runs before pitching.
  • AI agents that need a validated business profile as data (see the FAQ).

Input

FieldTypeNotes
domainslist of stringsDomains (example.com) or URLs; up to 100 per run (each entry past 100 gets a free error row); duplicates removed. Private addresses, IPs and ports are rejected.

Example input:

{
"domains": [
"mailchimp.com"
]
}

Each entry is one business. Set a maximum charge on the run and the Actor stops there. The Output tab has table views for the overview, contact details and technology platforms.

Output sample

One dataset row per input. Fields:

FieldMeaning
domainThe cleaned domain
statusok (returned and charged), not_charged, invalid_input or skipped
chargedtrue only for ok rows
business_name, business_name_sourceName and the page element it was read from (for example og:site_name)
contactContact surface found on the site, with a confidence; fields are null when the site publishes none
platformsDetected platforms: name, category, confidence and detection method
validationThe check result for this profile
reason, errorWhy a row was not charged
resultThe full profile as returned by Agent Harbor

Example ok row from a real run of this Actor (run QHeltxvJHj6eyFR5r, 2026-10-13, input mailchimp.com). The validation and full result fields are left out here for length; contact is all null because the home page publishes no contact details.

{
"domain": "mailchimp.com",
"status": "ok",
"charged": true,
"business_name": "Mailchimp",
"business_name_source": "og:site_name",
"contact": {
"email": null,
"name": null,
"confidence": "unknown",
"evidence": null
},
"platforms": [
{
"platform": "Mailchimp",
"category": "email_marketing",
"confidence": "high",
"method": "script_src",
"evidence": "https://mailchimp.com/cdn/product/release/dist/js-src/ecs/cookie-preferences-manager.20fc3264ba1c0834.js",
"ah_integrates": false
},
{
"platform": "Google Tag Manager",
"category": "analytics",
"confidence": "high",
"method": "script_src",
"evidence": "https://www.googletagmanager.com/gtm.js?id=GTM-MCZTKL&gtg_health=1",
"ah_integrates": false
},
{
"platform": "Google Search Console",
"category": "seo",
"confidence": "high",
"method": "meta_tag",
"evidence": "<meta name=\"google-site-verification\" content=\"Xg1n4sbg_Ovzp2zQ3gVV-GBaWZKQeyuePwOikbHbwDU\">",
"ah_integrates": false
},
{
"platform": "Bing Webmaster",
"category": "seo",
"confidence": "high",
"method": "meta_tag",
"evidence": "<meta content=\"\" name=\"msvalidate.01\">",
"ah_integrates": false
}
],
"reason": "ok"
}

Pricing example

Pay per event, nothing else: $0.005 per business (event business-scraped), plus $0.00005 once per run for Apify's start event. The price is set in the Apify Console (this Actor's actor.json carries no pricing block); the figure here is the Console price recorded on 2026-10-29, and the Console is the source of truth.

SizeCost (plus $0.00005 per run)
1 business$0.005
10 businesses$0.05
100 businesses$0.50
1000 businesses$5.00

So 100 businesses = $0.50 plus the start event. A business is charged only when it came back with a validated profile and its row was saved.

EventCharged whenNot charged when
business-scrapeda business came back with a validated profile and its row was savedthe domain was invalid, the site was dead or blocked, the profile failed the check, the service was down, or you reached your maximum cost

Limits

  • One page per business: the home page the domain resolves to. Contact details on other pages may be missed.
  • Up to 100 domains per run; about 30 requests per minute across all users, so a busy period can return rate_limited rows (free; retry later).
  • A run fails fast, with no charge, if Agent Harbor's service is unreachable.
  • A name, contact or platform is only what the home page shows. A missing contact means the page publishes none, not that the business has none.
  • The time a run takes was not measured for the example input; each domain is given up to 90 seconds.

FAQ

Why is my row not_charged? The reason says: an invalid domain, a blocked or dead site, a profile that failed the check, a busy service (rate_limited) or a timeout. None of those cost anything.

Why is contact empty? Many home pages publish no contact details. The Actor reports what the page shows and does not guess.

Is there AI in this? No. The scrape is deterministic and the validation strikes any platform claim its own evidence does not support.

Use with AI agents / MCP

  • Apify MCP server: add agent-harbor-llc/scrape-business-actor to the tools list, for example https://mcp.apify.com?tools=agent-harbor-llc/scrape-business-actor. Running Actors through it needs your Apify login or API token.
  • Keep spend bounded: pass maxTotalChargeUsd when you start a run through the API, or set the maximum cost in the Console.
  • Payments: agents without an Apify account can pay for runs with Apify's agentic payments (x402 USDC on Base, prepaid tokens, or Skyfire). The same service is also sold directly over x402 at https://x402.agentharbor.agency/scrape ($0.01 per call, USDC on Base; that price is separate from the Apify price above).

Who built it? Built and run by Agent Harbor LLC.

Changelog

0.2 (2026-10-31)

  • Added the dataset schema with three table views (Overview, Contact, Technology platforms), an output schema linking to them, full input descriptions, an example input and this README in the Store order.
  • The README price line now matches the Console price ($0.005 per business; it said $0.01).
  • No change to the run behavior, the output row shape or the charge.

0.1: first version. See CHANGELOG.md for the full list.