Inventory public business contact channels from contact and support pages

Audit public contact, about, support, policy, location, legal, privacy, or company pages you supply and emit structured public business contact-channel rows: labeled support paths and forms, phone numbers, social profiles, domain and source URL context, fetch timestamps, and warnings. Person-level private-contact candidates are suppressed. This is not a page-body cleaner and not a head-metadata audit — those jobs belong on Website Content Extractor and Meta Tag & OpenGraph Scraper.

From $2.00 per 1,000 results

Open Contact Page Audit & Business Channel Extractor on Apify

Public contact-channel inventory, not page body or meta-tag audit

Use this page when the job is a reviewable inventory of public business channels on contact and support surfaces. Use Website Content Extractor when the job is cleaned markdown or text from docs, product, pricing, policy, or help-center HTML. Use Meta Tag & OpenGraph Scraper when the job is title, canonical, robots, Open Graph, Twitter Card, hreflang, and JSON-LD from the HTML head.

This Actor Website Content Extractor Meta Tag & OpenGraph Scraper
Intent Inventory public business contact channels for site QA and account hygiene Clean docs, product, pricing, policy, and help-center HTML Technical SEO audit of head metadata, social previews, JSON-LD, and robots
Input Contact, about, support, or company URLs in urls (max 100) HTTP(S) page URLs in urls (max 200) HTTP(S) page URLs in urls (max 500)
What it reads Public contact / about / support / policy / company pages Live page HTML for cleaned body content HTML head and embedded JSON-LD (no JavaScript render)
Primary output public_contact_channel rows: support path, phone, social URLs, source context web_content rows: title, markdown/text, word count, optional metadata Title, description, canonical, robots, Open Graph, Twitter Card, hreflang, JSON-LD, issue flags
Person-level emails Suppressed; counted in warnings Not a contact extractor Not a contact extractor
Full page body / head audit No published markdown or meta-tag field list Yes — cleaned content is the deliverable Yes — head metadata and issue flags, not body text

This Actor is not a ranking tool, a full-site crawler, or a legal-advice product. Fetch public HTTP(S) URLs you own or are authorized to audit, with a lawful basis for downstream processing. Individual contact harvesting, personal profile collection, bulk promotional messaging, and consent-free communication workflows are outside the intended use.

Use cases

The published README positions the Actor for RevOps, support ops, compliance reviewers, and data teams. Start with owned or target-account contact, about, or support pages. Keep the first run small and expand only after the output shape is useful. This Actor returns bounded contact-channel rows. It does not emit a Site QA report; those are separate follow-on Actors on the Store page.

How is Contact Page Audit & Business Channel Extractor different from Website Content Extractor and Meta Tag & OpenGraph Scraper?

This Actor inventories public business contact channels from contact, about, support, policy, and company pages you supply. Required input is urls (maximum 100). Each published row is a public_contact_channel observation: supportChannel, phone, socialUrls, domain, sourceUrl, confidence, warnings, and fetchedAt. Person-level email candidates are suppressed. Website Content Extractor cleans docs, product, pricing, policy, and help-center HTML into markdown, text, or HTML (max 200 URLs) and does not emit this contact-channel inventory. Meta Tag & OpenGraph Scraper audits head metadata — title, canonical, robots, Open Graph, Twitter Card, hreflang, and schema.org JSON-LD — and does not extract support forms, phones, or social profiles as business channels. Use this Actor for contact-channel QA and account hygiene. Use Website Content Extractor for cleaned page body. Use Meta Tag & OpenGraph Scraper for crawler and social head metadata.

What input is required?

urls is required. The published schema accepts contact, about, support, or company URLs (minimum 1, maximum 100). Person-level emails are suppressed. Other live schema fields:

Field Type Default Notes
urls string[] required Contact, about, support, or company URLs; min 1, max 100. Schema prefill is https://www.icann.org/contact, https://automattic.com/contact/.
concurrency integer 5 Parallel requests; minimum 1, maximum 5 (1–5 recommended for public contact pages)
timeoutMs integer 15000 Request timeout in milliseconds; minimum 1000, maximum 30000
delivery string dataset dataset or webhook. Non-dry-run writes canonical dataset rows first.
webhookUrl string POST target when delivery is webhook and dryRun is false, after dataset output succeeds
dryRun boolean false Skip dataset writes and webhook delivery; local output/result.json is still written
maxChargeUsd number 1 Safety cap; minimum 0. Billable rows beyond the cap return as no-charge limit_reached summaries

Live schema names are urls, concurrency, timeoutMs, delivery, webhookUrl, dryRun, and maxChargeUsd. A README “Account data hygiene” example that sends domains and paths is not a live schema input — pass full page URLs in urls.

Published Store example run input:

{
  "urls": [
    "https://www.mozilla.org/en-US/contact/",
    "https://about.gitlab.com/company/contact/"
  ],
  "concurrency": 5,
  "timeoutMs": 15000,
  "delivery": "dataset",
  "dryRun": false
}

Published README first run (schema-valid):

{
  "urls": [
    "https://example.com/contact"
  ],
  "maxChargeUsd": 1,
  "delivery": "dataset",
  "dryRun": false
}

Start with owned or target-account contact, about, or support pages. Keep the first run small. Use dryRun: true before recurring watches or larger URL lists.

Run a contact-page audit on Apify

What does a result row contain?

The published README field list is rowType, domain, sourceUrl, supportChannel, phone, socialUrls, confidence, warnings, and fetchedAt. Sample rowType is public_contact_channel. Rows also include source URLs, fetch timestamps, warnings when a source is partial, and stable IDs when the workflow supports recurring change detection. There is no published full-page markdown or meta-tag audit field.

Published README sample:

{
  "meta": {
    "actorName": "contact-details-extractor",
    "actorTitle": "Contact Details Extractor",
    "bundle": "Site QA & Content Intelligence Pack",
    "fetchedAt": "2026-05-06T00:00:00.000Z",
    "totalRows": 1
  },
  "rows": [
    {
      "actorName": "contact-details-extractor",
      "rowType": "public_contact_channel",
      "domain": "example.com",
      "sourceUrl": "https://example.com/contact",
      "supportChannel": "support form",
      "phone": "+1 555 0100",
      "socialUrls": [
        "https://www.linkedin.com/company/example"
      ],
      "fetchedAt": "2026-05-06T00:00:00.000Z"
    }
  ],
  "warnings": []
}

That sample is the published README illustration, not a live coverage guarantee. The field list also includes confidence, which is not shown on the sample row. For cleaned page body after this inventory, send docs, product, or policy URLs to Website Content Extractor. For news, blog, or press URLs, use Article Content Extractor.

Are person-level emails collected?

No. The live input schema states person-level email candidates are suppressed. The README states the Actor emits public business contact-channel rows only; person-level private-contact candidates are suppressed and counted in warnings. Use it with public business contact, about, support, location, legal, privacy, or company pages and a lawful basis for downstream processing. Individual contact harvesting, personal profile collection, bulk promotional messaging, and consent-free communication workflows are outside the intended use. Do not use provider emblems or wording that implies approval by an upstream data provider.

How is Contact Page Audit & Business Channel Extractor priced?

Billing is pay-per-event. Live Store events are Actor Start at $0.001 (charged when the Actor starts; number of events depends on Actor memory, one event per GB, minimum one event) and result at $0.002 (single result in the default dataset). That is $2.00 per 1,000 results plus start. The README pricing section still quotes $0.008 per verified public business contact-channel row; live Store billing for a default-dataset result is $0.002.

Empty scans, person-level-only pages, unverified rows, and policy-suppressed candidates should not create dataset charges. The default dataset is the billable surface. maxChargeUsd defaults to 1; billable rows beyond that cap are returned as no-charge limit_reached summaries. Dry runs, validation-only runs, missing-key warnings, and unchanged recurring polls should not write payable default-dataset rows.

From $2.00 per 1,000 results ($0.001 Actor Start + $0.002 per default-dataset result)

See Contact Page Audit & Business Channel Extractor pricing on Apify

How do dataset, webhook, dry runs, and the charge cap work?

delivery defaults to dataset. Non-dry-run Apify runs write canonical dataset rows first. Webhook delivery POSTs one full payload only after dataset output succeeds, when delivery is webhook, webhookUrl is set, and dryRun is false. dryRun true skips dataset writes and webhook delivery; local output/result.json is still written. maxChargeUsd is a safety cap for the run (default 1, minimum 0).

Published README webhook example (schema-valid):

{
  "urls": [
    "https://example.com/support"
  ],
  "delivery": "webhook",
  "webhookUrl": "https://example.com/webhook",
  "dryRun": false
}

Open Contact Page Audit & Business Channel Extractor on Apify

Limits to keep in mind

Open Contact Page Audit & Business Channel Extractor on Apify

Related pages