Find contact forms on a list of websites: contact page, form type, captcha
Some sites publish no email at all, only a contact form. If you keep a list of websites for outreach, support routing, a directory or a compliance review, the first question is simple: where is the contact page, and what kind of form is on it? Opening 300 sites by hand takes hours. This guide shows a pay-per-site way to get the answer for a list in one run.
What you get for each site
| Field | Meaning |
|---|---|
contactPageUrl | The page that holds the contact route; contactPageSource says how it was found (a link, a guess like /contact, or the home page itself) |
formKind | The form provider when it is recognised (21 providers, including hosted form builders and WordPress form plugins), or html for a form the site built itself |
form | For site-built forms: the action, the method and the visible field names and types |
captchaKinds | reCAPTCHA, hCaptcha, Turnstile or other, when one is on the page |
mailtoPresent, telLinkPresent | True or false only. The Actor does not return the address or number |
status | found, no_contact_page, unreachable, blocked, robots_blocked, invalid_input or opted_out, with a failureReason |
What it does not do
- It never submits a form. It sends GET requests only.
- It returns no email addresses and no phone numbers. A test in the Actor asserts that no row contains an at-sign. If you need the addresses a site publishes, that is a different tool: find business emails from a list of websites.
- It reads robots.txt before each site and skips a site that asks crawlers to stay out. It does not work around a bot challenge: that site comes back as
blocked. - Companies on our opt-out list come back as
opted_outwithout being fetched.
A real run, in aggregate
On 2 November 2026 we ran it on five well-known company websites (not named here). All five came back found: three had a form in the page HTML (formKind html), one of them also recognised as a hosted form provider with a reCAPTCHA on the page; one had a mailto link on its contact page; and one had a contact page whose form is built by JavaScript after load, so the page was found but formKind was empty. That last case is the main limit: the Actor reads the HTML a plain request receives and does not run a browser. The five sites cost $0.00051 in total.
On our own guides site, which has no contact page, the row looks like this, and costs nothing:
{"domain": "keencrest-guides.web.app", "status": "no_contact_page", "billed": false,
"contactPageUrl": null, "formFound": false, "formKind": null,
"captchaPresent": false, "mailtoPresent": false, "pagesFetched": 4}
Contact forms for sites with no email
If you are already looking for emails, you do not need a second run for this: Website Contact Details Scraper returns the same two pointers, contactPageUrl and contactFormKind, at no charge on every row. In a run on 124 small-business websites on 2 November 2026, 38 had no email, and 23 of those 38 came back with their contact-form URL and kind (22 site-built forms, 1 Google Form). It never submits a form, and a row without an email is not billed. See find business emails from a list of websites.
Price
$0.001 per site where a contact page or a home-page form is found. Sites with none, unreachable, blocked or invalid ones are free. 1,000 sites with a 70% hit rate would cost about $0.70.
Using the result
Knowing where a form is does not make it fine to fill it in bulk. Many sites forbid automated submissions in their terms, and unsolicited messages are regulated differently by country. Use the list to route a person to the right page, to audit your own sites, or to decide whom to contact by hand, and check the rules for each country you write to.
How to run it
- Put the websites in a list, one address per line.
- Paste them into the Actor's input and run. Start with 10 sites.
- Filter on
status = found, then group byformKindandcaptchaPresent.
Try it: Contact Page & Form Finder on Apify. $0.001 per site where a contact page is found; the rest are free. The Apify free plan includes monthly credit, so a test run costs nothing out of pocket.
Related guides
- Find a company's website from its name (bulk): 96% on known companies, $0.80 per 1,000 found
- Company names to business emails (bulk): 11 of 20 names, $0.04 measured
- OCR API, pay per page, no subscription: $0.003 per page
- Find a Google Play app's competitors and similar apps, with installs: $0.30 per 1,000 apps
- Export a Google Play developer's app list and a category's competitor apps, with installs and ratings
- FMCSA insurance cancellation list and MC suspension list: what it is and how to pull it