B2B Account Research & Enrichment: Tech, Hiring, Contacts avatar

B2B Account Research & Enrichment: Tech, Hiring, Contacts

Pricing

from $5.00 / 1,000 company profiles

Go to Apify Store
B2B Account Research & Enrichment: Tech, Hiring, Contacts

B2B Account Research & Enrichment: Tech, Hiring, Contacts

Company domain in, one compact profile out: website technologies, email provider, job board with live open-job count, and public emails, phones and social profiles. No browser, no login. Charged only for useful profiles.

Pricing

from $5.00 / 1,000 company profiles

Rating

0.0

(0)

Developer

HirePulse

HirePulse

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Turn company domains into live hiring, website technology and email-provider signals. Prioritize accounts using open-job counts, hiring pace, departments and source evidence. Get one JSON row per company, with a separate status for every section. $0.005 per useful profile; blocked, parked and DNS-only results are not charged. Start with {"domains": ["linear.app", "vercel.com"]}; no third-party data-provider key required.

What each profile contains:

  • Hiring: the company's job board (Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters) with the live open-job count, postings published in the last 7 and 30 days, open roles by function, hiring_sales / hiring_marketing / hiring_engineering flags, open leadership roles, and the technologies named in its job postings, each with a short quote.
  • Website technologies: analytics, ad pixels (including those configured in Google Tag Manager), CMS, e-commerce, frameworks, payments, CDN.
  • How the company sells, from its home page: pricing page, free trial or free plan, "book a demo" or "contact sales", security/trust page and the certifications it claims, integrations page, API docs, status page.
  • Email setup from public DNS: mail provider (Google Workspace, Microsoft 365...), SPF senders, DMARC policy, verified services.
  • Public contacts: emails, phones, LinkedIn and other social profiles published on the company's own website.
  • The languages and countries the site is localized for.

No browser, no login, no paid data provider. Calling the Actor needs your Apify API token. Every part has its own status, so a blocked website is never reported as "no data", and a missing hiring count means unknown, not zero.

Built for sales and research agents (LangGraph, CrewAI, Claude/Cursor via MCP), n8n/Make/Clay workflows and CRM enrichment. Not for personal email discovery, mailbox verification, revenue or headcount.

Quick start

{ "domains": ["linear.app", "vercel.com"] }

One row per domain (real output for linear.app, 23 October 2026, shortened; hiring and sales signals from the pre-release build):

{
"domain": "linear.app",
"status": "ok",
"company_name": "Linear",
"description": "Purpose-built for planning and building products with AI agents.",
"tech_stack": ["Cloudflare", "Next.js", "React"],
"mail_provider": "Google Workspace",
"email_senders": ["Google Workspace", "Amazon SES", "HubSpot"],
"dmarc_policy": "reject",
"ats": {
"detected": true, "platform": "ashby", "match": "linked", "evidence_url": "https://linear.app/careers",
"active_jobs_count": 34, "remote_jobs_count": 34,
"departments": [{"name": "GTM", "count": 19}, {"name": "Product", "count": 13}, {"name": "Operations", "count": 2}],
"newest_job_posted_at": "2026-10-21T23:27:33.281000Z",
"sample_titles": ["Product Support Specialist, APAC", "Creative Producer", "Field Marketing Manager"],
"posted_last_7_days": 7, "posted_last_30_days": 10, "posting_date_source": "ashby.publishedAt",
"role_counts": {"engineering": 9, "customer_success": 7, "sales": 5, "design": 4, "marketing": 3, "product": 2},
"hiring_sales": true, "hiring_marketing": true, "hiring_engineering": true,
"job_tech_mentions": [{"name": "GraphQL", "postings": 8,
"evidence": "…new user-facing features with everything from database models to GraphQL resolvers and UI components - Optimize our data synchronization stack…"}]
},
"sales_signals": {"pricing_page": "https://linear.app/pricing", "signup_page": "https://linear.app/signup",
"trust_page": "https://linear.app/security", "integrations_page": "https://linear.app/integrations",
"contact_sales": "Contact sales", "motion": "hybrid"},
"contacts": {
"emails": ["hello@linear.app"], "phones": [],
"x_url": "https://x.com/linear", "github_url": "https://github.com/linear", "youtube_url": "https://youtube.com/@linear",
"contact_page": "https://linear.app/contact"
},
"sections": {"website": {"status": "ok"}, "dns": {"status": "ok"}, "technology": {"status": "ok"}, "hiring": {"status": "ok"}, "contacts": {"status": "ok"}},
"duration_ms": 1343
}

Every row also has charged (true when the profile was billed, see below), free_trial, note and scraped_at.

The run summary (OUTPUT in the key-value store) counts profiles per status, charged profiles and measured seconds per domain.

Input

FieldDefaultMeaning
domains—Company websites: stripe.com, https://www.linear.app/pricing or jobs@vercel.com. Up to 500 per run.
sectionsallAny of technology, hiring, contacts. DNS email signals are always included.
depthfastfast: home page plus one contact page. thorough: also about, team and imprint pages. Same price.
max_sample_jobs3Newest job titles to include (0–10). The job count always covers the whole board.

Inputs of the earlier B2B Account Research version (domain, maxResultsPerSource, sections with ads) still work. Fields that no longer apply are ignored, with a note in the run summary.

What is charged

One company-enriched event per profile that is useful. A profile is useful when the company website answered with a real page and at least one of these was found:

  • a technology other than hosting/CDN,
  • a public contact (an email at the company domain, a phone number or a social profile),
  • a job board linked from the company's own pages (even one with zero open jobs).

Never charged: invalid domains, domains that do not exist, websites that did not answer or refused automated access, parked or for-sale pages, profiles with only DNS data or only a page title, and profiles not delivered because the run's maximum cost was reached. Every row has charged: true/false. Set a maximum cost per run in the run options; the Actor stops cleanly when it is reached.

  • Apify free plan: the first 20 domains of each run are profiled at no charge; the rest are listed as not_checked.
  • Paid plans: the first 20 useful profiles per account are free (free_trial: true). The counter lives in a key-value store this Actor creates in your account (hirepulse-b2b-enricher-trial); deleting it resets the counter.

Statuses

statusMeaningCharged
okWebsite answered; every requested part was checked (a part may be empty).if useful
partialWebsite answered; at least one part timed out or its source failed. See sections.if useful
blockedThe website refused automated access (HTTP 401/403/429/503 or a bot challenge). Not the same as "no data".no
unreachableNo website answered, or it returned an error page.no
not_foundThe domain does not exist in DNS.no
parkedParked or for-sale page, not a company website.no
timeout, errorThe domain took too long or failed unexpectedly.no
invalid_input, not_checkedNot a domain, or skipped (free-plan limit or maximum cost reached).no

Each part in sections (website, dns, technology, hiring, contacts) has its own status: ok, empty (checked, nothing found), unavailable (the source does not publish it), timeout, error, blocked, not_checked or skipped.

How hiring data is attributed

Job counts come from the job boards' own public APIs. A board is attributed to a company only on evidence:

  • match: "linked": the company's home page or careers page links to or embeds the board. evidence_url shows where.
  • match: "domain_evidence": the website does not link it, but a board named after the company exists and its postings point to or name the company's domain (for example Greenhouse job URLs on stripe.com/jobs, or postings that mention miro.com).

A board with a matching name but no such evidence is never used. On 23 October 2026 the Greenhouse board named "ramp" belonged to a different company (1 posting), while Ramp's 171 jobs were on Ashby. The rule picks the right one; boards named "harbor" and "pulse" that belong to other companies were correctly rejected.

When no supported board is found, active_jobs_count is null: unknown, not zero. Workday, iCIMS, Taleo, SuccessFactors, BambooHR, Jobvite, Teamtailor and Personio boards are named in platform with supported: false and no count. Careers pages that load their job list only in the browser, with no board link in the HTML, are not covered.

The count is the number of open postings on the board. A role posted for several regions counts once per posting, so it can be higher than the number shown on a company's careers page. Linear: 34 postings on Ashby, 26 shown on linear.app/careers, all 26 included.

Hiring signals

FieldMeaning
posted_last_7_days, posted_last_30_daysPostings published in that window. posting_date_source names the job-board field used (for example greenhouse.first_published). A re-posted job can keep its old date, so this is posting age, not when the search began. null when the board publishes no dates.
role_countsOpen postings per function (sales, marketing, engineering, data, product, design, customer_success, finance, people, legal, operations, other), from job titles and departments.
hiring_sales, hiring_marketing, hiring_engineeringtrue when at least one open posting is in that function, false when none is, null when jobs are unknown.
leadership_openingsUp to 5 open VP, Head of, Director and C-level titles.
job_tech_mentionsTechnologies named in the postings, with the number of postings and a short quote. Text repeated across most postings (company blurb, benefits, equal-opportunity statements) is ignored, so "our customers include..." lists do not count.

Three distinctions stay explicit in the output:

  • A technology detected on the website is not proof the company uses it internally; an ad pixel found in Google Tag Manager is a configured tag, not proof that it fires.
  • A technology named in a job posting is not proof it is installed; the quote shows whether it is a skill, a partner or a customer.

How the company sells

sales_signals reads the company's own home page. Page signals are the URL that shows them, and phrase signals are the words as written. motion is self_serve (pricing, free trial/plan or sign-up), sales_led (only demo or contact sales), hybrid (both) or null. compliance_claims lists the certifications the site mentions; it is a claim, not an audit. site_locales lists the languages and countries the site publishes localized versions for; that shows a localized website, not business in a country.

Measured results

All on 23 October 2026, with the same 50 well-known company domains and fast depth. "Whole run" is what you wait for, including container start.

BuildEnvironmentRunDomainsWhole runPlatform usage
1.0.1Apify cloud, 2 GBaH73X2dlIcy7ISpgZ5044 s$0.0064
1.0.1Apify cloud, 2 GBvs93CInU1dcQwmeOo1 (linear.app)3.8 s$0.0006
hiring and sales signals, pre-releaseDocker on Linux, CPU limited like Apify (1 CPU per 4 GB), 2 GBlocal5080 s—
hiring and sales signals, pre-releasesame, 4 GBlocal5042 s—

Coverage in the pre-release run (48 profiles delivered; 1 website blocked, 1 domain does not exist):

SignalFound for
Useful (chargeable) profile45 of 50
Open-job count from a job board26 of 48 (14 linked, 12 by domain evidence); 2 more on unsupported boards
Posting dates / a posting in the last 30 days26 / 23 of the 26
Technologies named in postings24 of the 26
Open leadership role18 of the 26
Mail provider45 of 48
Pricing page / demo or contact-sales / free trial or plan30 / 25 / 18 of 48

Accuracy checks, done by hand:

  • Job counts matched the companies' own careers pages for Vercel (95), Calendly (9) and Zapier (12).
  • Role flags (precision): in a fresh random sample of 40 titles per flag, from 18 job boards of well-known tech companies (about 8 of them not used while tuning the rules), sales was right for 39, marketing for 38 and engineering for 37. Two of the engineering misses were fixed after the sample. Accuracy on small businesses was not measured.
  • Sales-signal links: 157 of 158 links opened. The one failure was a sign-up page that refuses non-browser requests.
  • Job-tech quotes: 29 of 30 sampled named a skill or tool; 1 named a customer.

Timing on the Apify platform can differ; the run summary reports it for every run.

Limits

  • Firmographics: no headcount, revenue or funding data. company_facts shows only what the website publishes in schema.org data, and is not verified.
  • Contacts: only what the company publishes on its own pages. No LinkedIn scraping, no guessed addresses, no mailbox verification (accepts_email means the domain has MX records). Phone numbers are taken from tel: links and schema.org only.
  • Advertising: not included.
  • JavaScript-rendered sites: websites built entirely in JavaScript can give partial technology and contact data.
  • Legal: make sure your use of business contact data complies with the laws that apply to you, such as GDPR and CAN-SPAM.

Use it from code, n8n or an AI agent

cURL (synchronous, returns the profiles):

curl -X POST "https://api.apify.com/v2/acts/hirepulse~b2b-account-research-agent/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' -d '{"domains": ["linear.app"]}'

Python:

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("hirepulse/b2b-account-research-agent").call(run_input={"domains": ["linear.app", "vercel.com"]})
for profile in client.dataset(run["defaultDatasetId"]).iterate_items():
print(profile["domain"], profile["ats"] and profile["ats"]["active_jobs_count"], profile["mail_provider"])

MCP (Claude Desktop, Cursor and other agents): add this Actor as a tool through the Apify MCP server at https://mcp.apify.com. Tool description for agents:

Research company domains for live hiring counts from supported ATS boards, hiring pace and roles,
website technologies, how the company sells, DNS mail providers, and publicly published contacts.
Use for account prioritization and recurring account checks.
Returns one row per domain with section statuses and source evidence.
Not for personal email discovery, mailbox verification, revenue, or headcount.
Unknown hiring counts are null, not zero. Accepts up to 500 domains; free-plan runs process up to 20.

Example prompt: "Use hirepulse/b2b-account-research-agent on these domains. Return domain, open-job count, jobs posted in the last 30 days, hiring_sales, website technologies, mail provider and section statuses. Do not infer employee count, revenue, personal emails or missing job counts."

n8n: use the Apify node with "Run Actor and get dataset". Send {"domains": {{ $json.domains }}} and branch on status and charged in the rows.