B2B Growth Signal Finder avatar

B2B Growth Signal Finder

Pricing

from $2.40 / 1,000 growth-signal-results

Go to Apify Store
B2B Growth Signal Finder

B2B Growth Signal Finder

Enrich company domains with public hiring, website, and growth signals - careers pages, open-role counts, demo/pricing/contact CTAs, expansion indicators, and a transparent 0-100 growth score. No login or cookies.

Pricing

from $2.40 / 1,000 growth-signal-results

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

B2B Growth Signal Finder

Enrich a list of company domains or website URLs with public hiring, website, and growth signals β€” careers pages, open-role counts, demo/pricing/contact CTAs, partner/case-study/location pages, and expansion keywords β€” then score each company with a transparent, non-AI 0–100 growth signal score. Built for B2B sales teams, lead-gen agencies, recruiters, and market researchers who want to prioritise outreach by visible buying-intent and growth.

No login, no cookies, no sessions. The actor fetches each company's public homepage and a few shallow-discovered key pages over HTTP. You pay one flat event per unique company row that passes your filters.

✨ Why this scraper

  • Company-level, signal-first β€” one flat row per company, focused on actionable growth indicators, not raw contact scraping.
  • Two input modes β€” paste full company URLs or bare domains; both are normalized to a root domain.
  • 27 flat fields β€” identity, hiring signals, website/buying-intent signals, and a transparent score. No nested objects; drops straight into Sheets/Excel/CRMs.
  • Transparent rule-based score β€” every point is explained by reason tags (no AI, no black box).
  • Cheap & compliant β€” public pages only, no login-only platforms, no expensive enrichment APIs, no email/contact scraping.
  • Pay-Per-Event β€” one flat growth-signal-result event per saved unique company. Duplicates, filtered, and failed rows are never charged.

πŸš€ Quick start β€” sample inputs

Example 1 β€” company URLs with filters

{
"companyUrls": [
"https://www.atlassian.com",
"https://www.figma.com",
"https://www.cloudflare.com",
"https://stripe.com"
],
"maxResults": 100,
"scanMode": "homepage_plus_key_pages",
"maxPagesPerCompany": 5,
"includeHiringSignals": true,
"minOpenJobs": 0,
"minGrowthSignalScore": 30,
"deduplicate": true,
"proxyConfiguration": { "useApifyProxy": true }
}

Example 2 β€” bare domains, homepage-only, tag filter

{
"domains": ["stripe.com", "notion.so", "figma.com"],
"scanMode": "homepage_only",
"includeHiringSignals": true,
"requiredSignalTags": ["active_hiring", "demo_cta_found"],
"proxyConfiguration": { "useApifyProxy": true }
}

🧾 Input fields

FieldTypeDefaultPurpose
companyUrlsarray[]Direct company website URLs to enrich
domainsarray[]Domain-only inputs (converted to https://<domain>)
maxResultsinteger100Max saved company rows (1–5000)
scanModestringhomepage_plus_key_pageshomepage_only or homepage_plus_key_pages
maxPagesPerCompanyinteger5Page guardrail (1–10; forced to 1 for homepage_only)
includeHiringSignalsbooleantrueDetect + scan a public careers/jobs page
minOpenJobsinteger0Keep companies with at least N visible open jobs
minGrowthSignalScoreinteger0Keep companies scoring at least this (0–100)
requiredSignalTagsarray[]Keep a company only if it has β‰₯1 of these reason tags
deduplicatebooleantrueRemove duplicate companies by root domain
proxyConfigurationobject{ "useApifyProxy": true }Datacenter, no-proxy, or custom proxy URLs

At least one of companyUrls or domains is required. No field accepts login credentials, cookies, session tokens, or account API keys.


πŸ“€ Output β€” one flat row per company

Results are returned as a flat Growth signals table β€” one row per company:

Growth signals output table

Sample record β€” strong signal (visible open-role count)

{
"input_value": "https://www.figma.com",
"normalized_domain": "figma.com",
"company_url": "https://www.figma.com/",
"company_name": "Figma",
"homepage_status": 200,
"scan_status": "success",
"pages_scanned": 5,
"careers_page_url": "https://www.figma.com/careers/",
"jobs_page_found": true,
"open_jobs_count": 167,
"job_departments_text": "Engineering|Product|Design|Sales|Marketing|Finance|Operations|People",
"job_locations_text": "Remote",
"remote_hiring_detected": true,
"hiring_keywords_found": "careers|open positions|job openings|remote",
"pricing_page_found": true,
"demo_or_sales_cta_found": true,
"contact_page_found": true,
"partners_page_found": true,
"case_studies_found": true,
"locations_page_found": false,
"growth_terms_found": "growth|launch|expanding|growing|scaling",
"growth_signal_score": 90,
"growth_signal_label": "very_high",
"growth_reason_tags": "careers_page_found|active_hiring|large_hiring_volume|remote_hiring|pricing_page_found|demo_cta_found|case_studies_found|partner_page_found|growth_terms_found|contact_page_found",
"source_pages": "https://www.figma.com/|https://www.figma.com/ai/|https://www.figma.com/careers/|https://www.figma.com/customers/|https://www.figma.com/blog/",
"error_message": null,
"scraped_at": "2026-06-09T06:42:16.802Z"
}

Sample record β€” careers page found, job count not in static HTML

When a careers page renders its roles only through heavy JavaScript, jobs_page_found stays true but open_jobs_count is null (V1 extracts visible HTML only β€” it does not run a browser):

{
"input_value": "https://www.cloudflare.com",
"normalized_domain": "cloudflare.com",
"company_url": "https://www.cloudflare.com/",
"company_name": "Cloudflare",
"homepage_status": 200,
"scan_status": "success",
"pages_scanned": 5,
"careers_page_url": "https://www.cloudflare.com/careers/",
"jobs_page_found": true,
"open_jobs_count": null,
"job_departments_text": "Engineering|Product|Design|Sales|Data|Security|It",
"job_locations_text": "Remote|Hybrid",
"remote_hiring_detected": true,
"hiring_keywords_found": "careers|remote|open roles|open positions|we're hiring",
"pricing_page_found": true,
"demo_or_sales_cta_found": true,
"contact_page_found": true,
"partners_page_found": true,
"case_studies_found": true,
"locations_page_found": false,
"growth_terms_found": "launch|launching|expanding|growing|we're hiring|growth",
"growth_signal_score": 68,
"growth_signal_label": "high",
"growth_reason_tags": "careers_page_found|remote_hiring|multi_location_hiring|pricing_page_found|demo_cta_found|case_studies_found|partner_page_found|growth_terms_found|contact_page_found",
"source_pages": "https://www.cloudflare.com/|https://www.cloudflare.com/products/|https://www.cloudflare.com/careers/|https://www.cloudflare.com/about/|https://www.cloudflare.com/case-studies/",
"error_message": null,
"scraped_at": "2026-06-09T06:42:16.802Z"
}

Field groups

  • Identity / status: input_value, normalized_domain, company_url, company_name, homepage_status, scan_status (success/partial/failed/filtered), pages_scanned
  • Hiring signals: careers_page_url, jobs_page_found, open_jobs_count, job_departments_text, job_locations_text, remote_hiring_detected, hiring_keywords_found
  • Website / buying-intent signals: pricing_page_found, demo_or_sales_cta_found, contact_page_found, partners_page_found, case_studies_found, locations_page_found, growth_terms_found
  • Scoring: growth_signal_score (0–100), growth_signal_label (low/medium/high/very_high), growth_reason_tags
  • Provenance: source_pages, error_message, scraped_at

Booleans default to false, unknown counts to null, text fields to null.


πŸ“Š Growth signal score (transparent, no AI)

The 0–100 score is a simple weighted sum, capped at 100:

SignalPoints
Careers/jobs page found+15
Open jobs: 1–4 / 5–19 / 20–49 / 50++10 / +18 / +25 / +30
Remote/hybrid hiring detected+8
Multiple job locations+8
Demo / contact-sales CTA+8
Growth terms (expanding, hiring, launch, growth…)+8
Pricing page found+6
Case studies / customers page+6
Locations/offices page+6
Partners page found+5
Contact page found+4

Labels: 0–24 β†’ low, 25–49 β†’ medium, 50–74 β†’ high, 75–100 β†’ very_high.

Every contribution is recorded in growth_reason_tags (e.g. careers_page_found, active_hiring, large_hiring_volume, remote_hiring, multi_location_hiring, demo_cta_found, pricing_page_found, case_studies_found, partner_page_found, location_expansion_signal, growth_terms_found, contact_page_found).


πŸ’Έ Pricing β€” Pay Per Event

One flat growth-signal-result event is charged per valid unique company row successfully pushed to the dataset. Failed inputs, duplicates, and filtered-out rows are never charged. The per-event price is set on the Apify Console. The actor also honours the per-run spending limit you set on Apify β€” it stops collecting once the limit is reached.

🚦 Proxy policy

Use Apify Datacenter proxy or no proxy for normal runs β€” both work reliably for public company-website crawling at this actor's conservative concurrency.

Apify Residential proxy is not supported. The actor will fail at startup if apifyProxyGroups includes RESIDENTIAL. Reason: in pay-per-event actors, residential bandwidth (~$/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's Custom proxy URLs field β€” that traffic goes through your provider, not Apify, and is unaffected:

http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777

βš™οΈ How it works

  1. Normalize every input URL/domain to a root domain and a candidate HTTPS homepage, deduplicating by domain.
  2. Fetch the homepage (HTTP-first, no browser). On HTTPS failure the HTTP variant is tried once.
  3. Discover & classify internal links (careers, about, contact, pricing, solutions, customers, locations, partners) and, in homepage_plus_key_pages mode, fetch up to maxPagesPerCompany - 1 high-value pages.
  4. Extract signals β€” company name, careers/jobs presence + visible open-role count, CTA/page indicators, and growth keywords.
  5. Score, filter, dedupe, then push valid unique rows and charge per row.

A RUN_SUMMARY object (inputs, saved, duplicates, filtered, charged events, blocked requests, pages scanned, runtime) is stored in the default key-value store.


🚫 Not in V1

Deep crawling, full job-description extraction, contact/email/person enrichment, AI scoring/summarization, LinkedIn or any login-only platform, paid data vendors, historical cross-run tracking.