Workplace Program Detector for Clay ERG DEI Benefits · Apify
Workplace Program Detector avatar

Workplace Program Detector

Pricing

from $6.80 / 1,000 domain analyzeds

Go to Apify Store
Workplace Program Detector

Workplace Program Detector

Detects which people programs a company publishes: employee resource groups, DEI, wellbeing and mental health, learning and tuition support, parental and caregiver leave, volunteering. Reads careers, culture, benefits and ESG pages plus live job postings. One flat row per domain for Clay.

Pricing

from $6.80 / 1,000 domain analyzeds

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

11 hours ago

Last modified

Features

Limited permissions

Share

🔎 What can Workplace Program Detector do?

Give it a company domain and it returns one flat row naming the people programs that company publishes: employee resource groups, DEI, wellbeing and mental health, learning and tuition support, parental and caregiver policy, and volunteering and giving.

Every row also reports how much of the company the actor actually read, so you can tell a real "no program" apart from a page it could not open.

📦 What you get⚙️ Features and integrations
🏅 Six program families, one boolean each
🔗 Evidence URL and phrase per family, so you can check the finding
📊 Coverage block, what was reached, blocked or thin
🧾 34 flat fields, snake_case, one row per domain
🌐 Two retrieval paths, website pages and live job postings
🤖 Auto board discovery for Greenhouse, Lever and Ashby
🧊 14 day cache, with a skipCache override
⬇️ Export to JSON, CSV, Excel, HTML or XML

Bought by teams selling into HR, People Ops, benefits and learning and development, and by employer brand and DEI consultancies building prospect lists from what companies publish.

🚫 This is not an employer review or ratings source. It does not score a company, rate its culture, or tell you whether a program works. It records what the company published on its own website and job board, and nothing else.

💡 Why use Workplace Program Detector?

If you sellRead these fields
ERG and community platformshas_erg, erg_evidence_url, erg_evidence_phrase
DEI programs and consultinghas_dei_program, dei_evidence_url
Mental health and wellbeing benefitshas_wellbeing_program, wellbeing_evidence_url
Learning platforms and tuition benefitshas_learning_program, learning_evidence_url
Family and caregiver benefitshas_parental_policy, parental_evidence_url
Volunteering and giving platformshas_volunteering_program, volunteering_evidence_url
Anything, as a disqualifierprogram_count, coverage, pages_reached

🧭 Two retrieval paths, because one path misses half the answer

The actor reads company web pages and live job postings, and it ships both because they find different things.

Measured during the build: across five real job boards covering 1,764 open roles, employee resource groups appeared in zero job bodies. Across seven company websites, employee resource groups appeared on two. Benefits language runs the other way, and shows up in job bodies that marketing pages leave out.

signal_source on every row tells you which path produced the finding.

📋 What data can Workplace Program Detector extract?

38 fields per domain. The ones buyers use:

FieldWhat it holds
has_ergCompany publishes employee resource groups
has_dei_programPublished DEI program, excluding legal boilerplate
has_wellbeing_programWellbeing or mental health program
has_learning_programLearning, development or tuition support
has_parental_policyParental or caregiver policy
has_volunteering_programVolunteering or giving program
program_countHow many of the six were found
*_evidence_urlThe page the finding came from
*_evidence_phraseThe wording that matched
signal_sourceWhich path fired, website or job postings
coverageHow much of the company was read
pages_attempted, pages_reached, pages_reached_listWhat was tried and what opened
pages_blocked, pages_thinRefused pages, and pages with almost no readable text
ats_provider, ats_slug_used, jobs_scannedWhich job board was read, and how many jobs
render_modeclient_rendered when the page needs a browser to show text
fetch_status, fetch_errorok, blocked, or the error that stopped it

⚠️ false and null are not the same thing. false means the pages were read and the language was not there. null means not enough was read to say. They are never collapsed into each other. A company that returns 403 on every path comes back with all six fields null and fetch_status: "blocked", not six confident falses. Read coverage and pages_reached before you trust any false.

🛠️ How to find a company's employee programs

  1. Open the Input tab and put a bare domain in domain, for example hubspot.com.
  2. Leave scan_web_pages and scan_job_postings on true so both paths run.
  3. Click Start.
  4. Read program_count and the six has_* booleans for the answer.
  5. Read coverage and pages_reached before you act on any false.
  6. Export from the Output tab, or pull the row through the API.

🧪 Using it in Clay

Add it as an Apify enrichment, map your domain column to domain, and the 38 fields land as one flat row with no reshaping. Every input is accepted as a string, which is what Clay sends.

Gate the run on your ICP column so you only spend the event on accounts you would actually work.

⚡ Skipping board discovery

If you already know the company's job board slug, put it in ats_slug and the actor reads that board directly instead of discovering it. That is the fastest path when you are running a list you have already resolved.

💵 How much does it cost to detect workplace programs?

One domain-analyzed event per domain.

PlanPrice per domain
Free$0.008
Bronze$0.0076
Silver$0.0072
Gold$0.0068

There is also an Actor start event at $0.00005, charged once per run per GB of memory.

💳 A domain that turns out to be unreachable is still billed. The actor did the work of attempting it, and a null row that tells you the site blocked us is a real answer. What is never billed is a run that does not start.

Free plan: this actor sets no monthly result cap, so a Free plan run is limited only by your Apify platform credit.

Your spending limit is honored. The run stops as soon as Apify reports that the maximum cost per run you set is reached, and the optional max_charge_usd input stops it before any charge that would cross your own cap. Every row already charged stays in the dataset, and each row lists what it was charged in billable_events_json.

⌨️ Input

Everything is on the Input tab. The options worth explaining:

FieldTypeDefaultWhat it does
domainstringrequired unless domains is setBare domain, for example hubspot.com. Protocol and path are stripped.
ats_slugstringemptySkip board discovery and read this Greenhouse, Lever or Ashby slug directly. Ignored on a batch of more than one domain.
programsarrayall sixReport only these program families. See below.
scan_job_postingsbooleantrueRead the company's live job bodies.
scan_web_pagesbooleantrueProbe the careers, culture, benefits, DEI and ESG paths.
max_pagesstring14Clamped to 1 to 25. Sent as a string for Clay.
skipCachestringfalsetrue forces a fresh crawl past the 14 day cache.
domainsarrayemptyA list of domains, one row each in one run. Use it or domain; the list wins when both are set. Each domain is billed as its own row
max_charge_usdnumberemptyOptional cap in USD for this run. The run stops before any charge that would cross it

🎯 Reporting on one program family

programs narrows the answer to the families you care about. Six are available:

erg, dei, wellbeing, learning, parental, volunteering.

{ "domain": "stripe.com", "programs": ["parental"] }

Two rules the row follows, and they are the same rule:

  • A family you did not select reports null, never false, on its boolean, its evidence URL and its evidence phrase. false means the actor read the corpus and did not find it. null means nobody asked.
  • program_count counts only the families you selected, so a run narrowed to parental leave reports 1 or 0 rather than a number that includes families you never asked about.

A selected family that is genuinely absent still reports false, because that one is a real measurement. programs_requested on every row records what was asked for.

Note that narrowing does not make a run cheaper. The corpus is the same set of pages and job bodies either way; only the matching is narrowed.

📤 Output

One row per domain, exportable as JSON, CSV, Excel, HTML or XML. 34 flat snake_case fields, with null rather than a missing key.

{
"domain": "hubspot.com",
"has_erg": true,
"erg_evidence_url": "https://www.hubspot.com/careers",
"erg_evidence_phrase": "employee resource groups",
"has_dei_program": true,
"has_wellbeing_program": true,
"has_learning_program": true,
"has_parental_policy": true,
"has_volunteering_program": false,
"program_count": 5,
"signal_source": "website",
"coverage": "high",
"pages_attempted": 14,
"pages_reached": 11,
"pages_blocked": 0,
"pages_thin": 1,
"ats_provider": "greenhouse",
"jobs_scanned": 132,
"render_mode": "server_rendered",
"fetch_status": "ok",
"fetch_error": null
}

Every row also carries these fields:

FieldWhat it holds
dei_evidence_phraseThe matched phrase plus up to 120 characters of surrounding text, scrubbed the same way as the ERG phrase.
wellbeing_evidence_phraseThe matched phrase plus up to 120 characters of surrounding text.
learning_evidence_phraseThe matched phrase plus up to 120 characters of surrounding text.
parental_evidence_phraseThe matched phrase plus up to 120 characters of surrounding text.
volunteering_evidence_phraseThe matched phrase plus up to 120 characters of surrounding text.
run_dateISO timestamp of the run.
row_statusOne word verdict for the row, always present: ok (the look completed and found data), no_match (the look completed and found nothing), error (the look could not complete, read error_reason), or summary (a notice row, not a result).
error_reasonWhy the row is not a clean result, in plain words. Null on a clean row. Always present as a key.

💡 Tips

  • Run it monthly on the same list and diff two rows. That turns a snapshot into a trend.
  • A documented absence is a pitch. has_wellbeing_program: false with coverage: "high" is a company whose competitors publish a program and it does not.
  • Use program_count as a cheap sort. Companies publishing five or six families are already investing in this area and are usually the warmer conversation.
  • Set ats_slug when you have it. It removes the discovery step.

⚠️ Known limits

A false is only as good as the pages that opened. On a company where one page was reached, a false means very little. Check pages_reached and coverage on every row.

JavaScript-only careers sites cannot be read. Some large companies serve a careers page that is an empty shell until a browser runs it. Measured during the build: one site's careers page held 20 characters of readable text, and another held 1,141 characters inside 84,600 bytes of markup. Those rows say render_mode: client_rendered with pages_thin above zero. Treat every false on them as unknown.

Some sites refuse outright. One of the seven domains in the build sample returned HTTP 403 on nine of fourteen paths. Those rows come back fetch_status: "blocked" with all six program fields null.

Some sites ask not to be read. robots.txt is read and honored on every domain before probing. A site that disallows crawling gets pages_attempted: 0 and null program fields. That is the site's decision recorded correctly, not a company without programs.

Employee resource groups are almost never named in job postings. If a company blocks its website, has_erg stays null even when the other families resolve from job postings.

Internal branding defeats keyword matching. Companies name their groups whatever they like. One large company in the build sample calls them Equality Groups and was invisible until that phrase was added. Expect misses on unusual internal naming.

Small companies often have no reachable website. One test target has no working HTTPS certificate and returns a network error on every path. That is a none coverage row, not a company without programs.

This is a snapshot, not a trend. The actor does not say whether a program is growing or being wound down. The archival sources that would answer that take between 2 and 18 seconds per query, far more than this actor's whole runtime. Run it monthly and diff instead.

Legal boilerplate is excluded on purpose. "Equal opportunity employer" appears in almost every US job posting and is not counted as a DEI program.

The actor records that a company publishes employee resource groups, and deliberately does not record which groups. The ERG evidence phrase is capped tight and dropped entirely if what survives names a protected characteristic. When that happens has_erg stays true and the evidence URL stays populated, so you keep the finding and its source and lose only the sentence. The same scrub runs on the DEI phrase.

❓ FAQ

Why is every program field null?

The site blocked the actor or could not be reached. Check fetch_status and pages_blocked. That row is a coverage problem, not a company without programs.

Does it use a proxy?

No. Every path runs direct with full browser headers. The design answer to a block is an honest blocked status rather than a workaround.

How fresh is the data?

Results are cached for 14 days per domain and input combination, because careers and benefits pages change quarterly at best. Pass skipCache: "true" to force a fresh crawl.

Can I run a list instead of one domain?

Yes. Run it per row from Clay, or drive it through the Apify API and collect the dataset.

Does it tell me the names of a company's ERGs?

No, by design. It records that a company publishes employee resource groups and drops any evidence phrase that names a protected characteristic.

🧩 Want other GTM data?

Mamba Labs builds a fleet of enrichment actors that share one flat output convention:

ActorActor ID
Account Hiring WatchgRAZA5WBi1r6L0gy7
Agent Accessibility AuditoranxbRv0lKrpQ1pnua
Agent to Brokerage ResolverePRRGLxOGyaVHO4dI
AI Answer Visibility TrackerRJZvzKniYK4nswcMg
AI List Extractor for Any WebsiteD5hOdIez45M0NX5jD
AI Tooling DetectorEwkHhmqiuJgRoVEbE
Amazon Product, Price, and Stock TrackerMtJPZoyjJ3IeqTFyo
Amazon Top Reviews Scraperwh6Mq6G6BlW1CRPwx
API Deprecation and Breaking Change MonitorpHsbS3xXUK8Jqutz5
App Store and Google Play Review MonitorMaCMEhGrbchxQZ92G
B2B Reddit Conversation MonitorSoDryzzsjmY3SsiyG
B2B Social Video TranscriptsdG2UYVKE2e4zfDucK
Bluesky Brand Presence MappereLpxzP4IuXznlFVND
Bluesky Posts ScraperKldSjS7wjoeZ7vQGm
Brand Sponsor FinderPPgK6xrgOmvL7Nrys
Bulk WHOIS and RDAP Domain Age LookupMTrkG5FLU6SjqLdJY
Business PDF Field ExtractorvM7JCk0CMAx5W0oJh
Career Change Signal EnginevX2Yga1a6wGaXaP14
Company Careers Page Jobs, 17 ATS BoardsizP0rfIgf5YaRZfIh
Company Change Event FeedoX44rS0fkEJ3rXLWe
Company Discovery List Builderjch0HdaZnpbMqlcGS
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Funding RecordOFS4Mt1gyYNtGfUbE
Company Headcount EstimatoraHC4GROnNt6kfZe5r
Company Identity Resolverlr8fTRAmZCBZmuwwh
Company Role Email, Phone and Address Finder4mMncKaJykiq94grz
Company Social Presence Mapper4k6CCemkgBDz18m2h
Competitor Price, Stock, and Changelog MonitoryxdgCbUQ4PYQWwRNU
Contact Classifier0lGSeYJmniXhGANnO
Contractor License Search, CA, TX, WA, OR, LAWBYK3CPI2kdeq4bP1
CRM Contact Job Change CheckerL8UbEmMJC1XYPSZOb
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
Ecommerce Platform Profiler5G2NeYjBbQTjaTn9L
Ecommerce Store DiscoveryPeHu4sLyFvQHXUUrX
Email List Verifier, Bring Your Own KeyCzVJ4NlaCKk80xpgE
Event Presence IndexWLhMy8fMDgsxdYxv5
Eventbrite Events Scrapersgc6znyrbjOy5Yk9f
Expert Witness Finder, US and AustraliaLIpwlgfE3LaQBaXd4
Facebook Posts ScraperT6jxIeq4ua0SLXnqG
Funding and Press Signal ScannerFS13X6dhQVgX3XOM6
GDPR Cookie Banner and Consent CheckerTrKyOS0KBoGC35nbr
GitHub Followers and Following ExportSGNxDmFb9v3tRDaFI
GitHub Organization Signal ScannerahF8RRpv5mzPao5CN
Google Ads Transparency Center Scraper by Domain1eOwxhBVxzvOXAm4s
Google Maps Places ScraperSuvHCNJ7pIuw6gn54
Google Trends ScraperOeDzaACKmBYJXzHZk
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
Healthcare Provider NPI EnricherMrgbHzcpDq3mOv9Df
ICP Fit ScorerW161DT8W4kW55dMFh
Influencer Change Monitord2VVgahNL6UmcLkhg
Influencer Lead List BuilderKnmByszcv135yM30G
Influencer Profile ScraperEqEnklDVMIcB1V499
Influencer Search Across TikTok, Instagram and YouTubetpkedmloIIWtXx6sg
Influencer Talent Agency LookupzCuX4Mgyg6JvXgGzd
Instagram Facebook Brand Presence MapperHXh65I0JBjPsunbY8
Integration and Marketplace Presence MapperV0guNuvM85Q61f2gj
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Job Posting MonitorQCfICD9kOPiOdj5iI
Journalist and Media List BuildermAfizsZC8qRoR0ecS
Launch Directory List BuildercRq3bmvEZxZtioQ7U
Lead File Import CheckerRwlGVXTf46LqZdUgt
Legal Entity ResolverKHFyPCDIx7CyqULYm
Link in Bio Scraper and Newsletter DetectorOorucdheTIgu7RFzK
LinkedIn Company Page MapperzOPm6A9JEhUGcIdFW
LinkedIn Jobs FeedSH6N0d8cz46BhCC8B
LinkedIn Post TrackeroiGLNPuaf5BRaz9K5
Local Business Lead BuilderqMN97aoHhsAS5bznV
Local Rank and Map Pack Trackergv0kyHGDIg8XscclB
Lookalike Companies from Seed Domainse2O426WBAbLLQL4Z2
Manufacturer and Supplier FinderQcsdmd0lUfPzVkonh
MCP Server Change and Health MonitorIeqjWF9U0BdDQFY08
Media URL TranscriberSyfr7Ya3EsHgWfrB6
Meta Ad Library Ads by Company, Graph APIJ1GWlSXfSGU3u8Wng
Mobile Phone Waterfall6OOgPktf7RIa5XCOP
Multi Platform Social Posts and CommentsicFuHR1EzDvUcfCQ5
Netherlands Rental ListingssGKGsbwoX18lFb6dR
New Hire FindercKuc38p4nYHNF3IW8
Newly Registered Companies, UK, Norway, Finland, Franceg2WfZhWvCtc57g2Jo
News and Media Mention Monitorgol1PPUKrsIk4QLBd
News Site Article ArchiveNjcF3UD8791raFNHh
Newsletter Sponsor TrackerqSwpqxD1TiPZpLQHv
Open Tender and RFP FinderkPTGz6t6TFoUUyfaO
Outbound Stack Detectorv43UJC8r7qW7cBSTG
Page Finder and ExtractorTpurgcOZbVnknlaiC
Partner and Member Directory ExtractorZX0XJPPUvnFJxeC1a
People Finder & Email VerifierLEgloG7tWgQl4o6TD
Person LinkedIn URL ResolverssuyPV8LnEsL8qbnb
Person Social Footprint MapperjfQXa2zW9FHCJot9K
Personal Email to Company ResolverAefT5Ye6YNPFQwJBf
Pinterest Brand Presence Mapperd1HvjZfKhgvWsoEwn
Podcast Guest and Host Findero2MGSvgbSLeeXOsIo
Private Company Funding HistoryH02K3rQIVOYpnLYc3
Product Hunt Daily Launches with Maker DomainsO4VX63drWK9Y9x641
Property Owner Records0J7ovG1iaZpQD1P0T
Prospect Engineq9rT6v64nUJdPexOQ
Public Feature Board and Roadmap MonitorrcHF5gj5r2Vqnry35
Publishing Frequency TrackerTbLwaUUATdYb6wp4N
Recent Funding Rounds FeedKueVp9MOz7iOoAgDp
Reddit Brand Presence MapperpKQZmDaT70SEb54bZ
Reddit Search and Thread Scraper4Gsth5cP2Xt9V2xDN
Reporting Window FinderuINxR7a1IW8qUTRUX
Research Topic Institutions and AuthorsOH8ANqt7bCKbo72Gk
Semrush Domain Metrics3dqa0abJrpssHtrYL
Sequencer Event PollerS6s8Rjd61tGdrMRk4
Sequencer Lead Push0Jv27VeWM5tSZQs9x
Shopify App Store and Chrome Web Store ListingsgaY0BzkLyN77mD3wI
Site Crawler for Links and TableslLLJ6JxZ4XqN8ULz0
Streaming Subscription Prices by CountrytbMroS2Zyn57bW17E
Substack Newsletter and Posts ScraperUEFsdwiPLmPNVy9xd
Team Page People Extractorj8a9zX0k4mNbvDbWK
Tech Stack Signal Detectorqyd7nNyqFPelQViBx
Tennis Match Datav3OX6zxXHZOf2yurO
Threads Posts by Keyword, Exact Match2OT8K8RiEEWtaj2MW
Ticketmaster Event PricesCrvPX4IwLXQX9bls1
TikTok Brand Presence Mapperfco8FvoJcSafbeyd1
TikTok Video Statsuz9Q3cEycRgA6NfqA
Trustpilot Reputation Enricher3lIqfCt61j4hqE1xz
US and UK Contract Award Winners by CompanyzhEtllASykOcx9hJ8
US Import Records Buyer FinderVIMafpKF5ggOw0COU
VC and Accelerator Portfolio List BuilderchH8hrfuoqqolW06m
Website Accessibility Checker, WCAG 2.2 AAP3jBj3FRghKEhX52z
Website Phrase and Business Model ClassifierCBuZ9k7sRwBeiKiCS
Website Traffic Rank EstimatorGnOFUzlNVIoXgeJjH
Work Email WaterfallOT6xqTFThC0Rjf7Zj
Workplace Program DetectorLi6pPDhqbdzFz3h7G
X Brand Presence MapperoLOgadhHUkNAyDA3w
YouTube Channel and Video List ScrapertxaAjeBqgj5MStFE4
YouTube Channel Email FinderIDgKZcmeeuunUbccN
YouTube Channel from Company Domain6hSpD3kd2s2IQ4VSs
Zillow Listing DetailsyG4zM0Enfsw2NefJ1

Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.

🆘 Support

Something wrong, or a company the actor reads incorrectly? Open an issue on the Issues tab with the domain and the row, and we will look at it.

ℹ️ Sourcing and legal. Every field comes from pages the company publishes itself, read directly, with robots.txt honored on every domain. The row describes what a company published on its own website and job board. It is not an assessment of the company, its workforce, or how well any program works. You are responsible for how you use the output, including under applicable employment and data protection law.

Built by Mamba Labs.