Job Posting Monitor Clay-Ready Hiring Signal Discovery avatar

Job Posting Monitor Clay-Ready Hiring Signal Discovery

Pricing

from $17.00 / 1,000 results

Go to Apify Store
Job Posting Monitor Clay-Ready Hiring Signal Discovery

Job Posting Monitor Clay-Ready Hiring Signal Discovery

Keyword-driven job posting monitor that finds companies hiring for any role across job boards. Returns flat, Clay-ready, firmographic-enriched rows with company LinkedIn URL per posting.

Pricing

from $17.00 / 1,000 results

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

13 days ago

Last modified

Share

๐Ÿ“‹ What can Job Posting Monitor do?

Give it role keywords and it returns the companies hiring for that role right now, one clean row per posting, with each company enriched with its domain, LinkedIn URL, employee count and industry.

This is the reverse of a domain-level ATS checker. You do not give it a company and ask "are they hiring?" You give it a role and ask "who is hiring for this?"

๐Ÿ“ฆ What you getโš™๏ธ Features and integrations
๐Ÿข Hiring companies, deduplicated to one row per posting
๐Ÿ”— Domain and LinkedIn URL resolved per company
๐Ÿงน Staffing agencies and freelance marketplaces filtered out
๐Ÿงพ 16 flat fields, snake_case, Clay-native
๐Ÿ” Google Jobs discovery via your own SerpAPI key
๐Ÿท๏ธ Company type classification on every row
๐Ÿ”„ Cross-run delta detection, only new postings
โฌ‡๏ธ Export to JSON, CSV, Excel, HTML or XML

Bought by anyone running role-triggered outbound: recruiters, staffing-adjacent vendors, and sellers whose buying signal is a specific role opening.

๐Ÿšซ The keyword list is fully generic, and the editorial default is just a preset. It ships with proofreader, copy editor and content editor because that was the first use case, but the same actor tracks engineering, sales, marketing, operations or finance by changing the keywords.

๐Ÿ’ก Why use Job Posting Monitor?

If you wantRead these fields
The hiring companycompany_name, company_domain
An outreach targetcompany_linkedin_url
To size the accountemployee_count, industry
To drop the wrong kind of companycompany_type
The role and where to applyjob_title, job_url, location, is_remote
Recency and noveltyposting_date, is_new_posting
Why this row matchedmatched_keyword, job_description_snippet

๐Ÿงน Filtering out the noise is most of the value

Raw job search results are dominated by staffing agencies and freelance marketplaces reposting the same roles. This actor filters both.

Staffing and recruitment agencies are filtered on both the company name and the job description text, because plenty of agencies do not have "recruitment" in their name. Freelance marketplaces (Upwork, Fiverr, Freelancer, Toptal and similar) are excluded by name, and the list is yours to extend.

Everything that survives is classified: direct_employer, staffing_agency, government or unknown. If you disagree with the filter, turn it off and filter on company_type yourself.

๐Ÿ”„ Re-runs only return what is new

is_new_posting and the built-in delta cache mean a scheduled run does not re-emit everything it already showed you. Pass previous_run_date if you would rather control the window yourself.

๐Ÿ“‹ What data can Job Posting Monitor extract?

16 fields per posting.

FieldWhat it holds
company_nameThe hiring company
company_domainResolved canonical domain, or null
company_linkedin_urlCompany LinkedIn page, the primary outreach field
employee_count, industryFirmographics, where the company exposes them
company_typedirect_employer, staffing_agency, government or unknown
job_titleThe role title
job_urlDirect apply or posting URL
posting_dateNormalized to ISO, best effort
source_boardgoogle_jobs, greenhouse, lever or ashby
location, is_remoteWhere the role is
job_description_snippetFirst 500 characters of the description
matched_keywordWhich of your keywords this posting matched
is_new_postingtrue when not seen in a prior run
run_dateWhen the run happened

โš ๏ธ employee_count and industry are frequently null, because the firmographic source only reports them when a company exposes them. The company_size_min and company_size_max filters therefore apply only when a size is known, and will silently keep companies of unknown size. company_linkedin_url, the field most people actually act on, resolves for the large majority.

๐Ÿ› ๏ธ How to find companies hiring for a role

  1. Open the Input tab and put your role titles in keywords.
  2. Paste a SerpAPI key into serpapi_key, or set a SERPAPI_KEY environment variable on the actor.
  3. Set country and lookback_days to scope the search.
  4. Leave the staffing and freelance filters on.
  5. Click Start, then work the rows where company_type is direct_employer.

๐Ÿงช Using it in Clay

Point a Clay table at this actor's dataset, one Clay row per output row. The key columns are company_name, company_domain, company_linkedin_url, job_title and posting_date.

Use company_linkedin_url as the input to a LinkedIn step, and posting_date plus is_new_posting to prioritize fresh signals.

Schedule the actor and rely on the built-in delta cache, or pass previous_run_date, so each refresh only ingests new postings.

๐ŸŒ Choosing your job board sources

sources selects which boards a run searches. The default is google_jobs, which is what every earlier version did, so an existing saved input behaves exactly as it did before.

Sources run as an ordered chain, cheapest first, not all at once:

TierSourceKey neededBilled perWhat it covers
0jobicynonenothingRemote roles, marketing, writing, design and support heavy.
0remotivenonenothingRemote roles, keyword searchable at the source.
0arbeitnownonenothingEurope heavy, strong on Germany and the Netherlands.
0themusenonenothingMid market and enterprise employers in the United States.
0remoteoknonenothingThe newest 100 remote postings on Remote OK.
0weworkremotelynonenothingThe We Work Remotely feed, remote only.
0himalayasnonenothingThe newest pages of Himalayas, remote only.
1adzunaAdzuna app id and keycallIndeed style aggregate coverage per country, dated at the source.
2jobspipeJobsPipe keyjob returned30 plus boards normalized, with the employer domain on the row.
2google_jobsSerpAPI keysearchThe widest corpus: Indeed, LinkedIn, Glassdoor, ZipRecruiter and career pages.
2theirstackTheirStack keyjob returnedCareer sites and boards, with employer domain, LinkedIn URL and headcount on the row.

Tier 0 runs every keyword. Tier 1 runs only on keywords Tier 0 left short, and Tier 2 only on keywords still short after that, JobsPipe first and TheirStack last because its allowance is the smallest. A keyword is satisfied once the run has found enough_new_companies_per_keyword distinct new companies for it (default 3); when every keyword is satisfied the chain ends whatever budget is left. Between tiers every posting is checked against the cross-run delta cache, so a metered source is never asked for a posting the run already has.

Metered queries are narrowed to metered_window_days (default 2, today and yesterday). JobsPipe and TheirStack bill per job returned whether or not you have seen it before, and the delta cache dedupes after the bill, so the date window is what keeps those credits.

A posting that shows up on two boards is deduplicated on company plus normalized job title. The run log reports the raw count, the new count and the calls and credits spent per source and per country, and the same table is written to the run's key value store as RUN_SUMMARY.

countries loops several countries inside one run. Metered sources query each country separately; the Tier 0 boards are global remote boards and run once. Use the names Google Jobs accepts: United States, United Kingdom, Canada.

The seven Tier 0 boards need no credentials of any kind, so a run with sources: ["jobicy"] works on a fresh account with nothing configured.

๐Ÿ”‘ The keys

Every metered source takes its key from the input first (serpapi_key, adzuna_app_id, adzuna_app_key, jobspipe_key, theirstack_key) and falls back to the matching environment variable on the actor. With neither, that source is skipped and the run says so. The Tier 0 boards still run.

Keys set in the actor's environment belong to the operator and are honored only for runs owned by the accounts the operator lists; any other account brings its own keys through the input.

โŒจ๏ธ Input

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

FieldTypeDefaultWhat it does
keywordsarrayeditorial presetRole titles to search for. Any role works.
sourcesarray["google_jobs"]Which job boards to search, run as the chain above.
serpapi_keystringnoneYour SerpAPI key for google_jobs, unless SERPAPI_KEY is set on the actor.
adzuna_app_id, adzuna_app_keystringnoneYour Adzuna credentials for adzuna.
jobspipe_key, theirstack_keystringnoneYour JobsPipe and TheirStack keys.
countrystringUnited StatesGeographic filter for one country.
countriesarraynoneSeveral countries in one run; overrides country.
metered_window_daysinteger2Date window for metered queries, 1 to 7.
enough_new_companies_per_keywordinteger3New companies that satisfy a keyword and stop its chain.
metered_run_capinteger50Ceiling per metered source per country per run.
lookback_daysinteger30Only return postings newer than this.
company_size_min, company_size_maxintegernoneDrop companies outside the range, when size is known.
exclude_staffing_agenciesbooleantrueFilter staffing and recruitment postings.
exclude_freelance_marketplacesbooleantrueFilter Upwork, Fiverr and similar.
freelance_marketplacesarray7 defaultsOverride or extend the marketplace list.
remote_onlybooleanfalseOnly return remote postings.
previous_run_datestringnoneISO date; only emit postings newer than this.
max_resultsinteger100Raw postings scanned before filtering.
max_companiesinteger40Cap on unique companies enriched per run. Bounds sub-actor cost.

๐Ÿ“ค Output

One flat row per posting, exportable as JSON, CSV, Excel, HTML or XML.

{
"company_name": "Stripe",
"company_domain": "stripe.com",
"company_linkedin_url": "https://www.linkedin.com/company/stripe",
"employee_count": 8000,
"industry": "Financial Services",
"company_type": "direct_employer",
"job_title": "Senior Software Engineer",
"job_url": "https://boards.greenhouse.io/example/jobs/123",
"posting_date": "2026-06-25",
"source_board": "google_jobs",
"location": "San Francisco, CA",
"is_remote": true,
"job_description_snippet": "We are seeking a backend engineer to...",
"matched_keyword": "software engineer",
"is_new_posting": true,
"posted_via": "LinkedIn",
"search_country": "US",
"degraded": false,
"degradation_reason": null,
"run_date": "2026-07-01T14:06:22.297Z"
}

search_country is the country a metered query ran for, null for a global remote board. degraded is true, with a plain reason, on a row whose enrichment did not finish inside its time budget: a null company_domain on such a row means unresolved, not absent. Identity, firmographics and LinkedIn each have their own budget, and LinkedIn runs last, so a slow LinkedIn lookup can cost a LinkedIn URL and nothing else.

source_board is the source you selected. posted_via is the board the posting was actually published through, as reported by that source, so you can see the board distribution behind a google_jobs run without reconstructing it from the URLs.

๐Ÿ’ก Tips

  • Work company_type: "direct_employer" first. It is the reason the filtering exists.
  • Tighten lookback_days before raising max_results. Fresh postings convert better than deep ones.
  • max_companies is your cost control. It bounds how much enrichment a run can trigger.
  • Schedule it and filter on is_new_posting to turn this into a standing feed rather than a one-time list.
  • Extend freelance_marketplaces with whatever else clutters your vertical.
  • No SerpAPI key yet? Start with sources: ["jobicy", "remotive"]. No credentials needed.
  • Group posted_via in your export to see which boards actually carry your role.

โš ๏ธ Known limits

Discovery depth is bounded by max_results. Very high-volume keywords may need multiple runs or a tighter lookback_days.

Company enrichment is capped per run by max_companies, deliberately, to bound sub-actor cost.

Enrichment depends on name-to-domain resolution. Ambiguous or very small companies may not resolve, and those rows come back with a null domain and null firmographics rather than being dropped.

employee_count and industry coverage varies and is frequently null. The size filters apply only when a size is known.

Google Jobs coverage excludes some regions where the widget is disabled, including the EU.

Posting dates from aggregated boards are often relative, for example "25 days ago", and are normalized to a best-effort ISO date.

A SerpAPI key is required. Without one, discovery returns nothing.

โ“ FAQ

Do I need a SerpAPI key?

Yes. Discovery runs on the SerpAPI google_jobs engine. The free tier covers 250 searches per month.

Why did a run return nothing?

Usually no key, or a keyword and country combination the selected source does not serve. The run sets a status message saying which, emits zero rows and exits cleanly rather than erroring.

A run that finds nothing costs nothing. Earlier versions pushed a single explanatory row when there were no new postings, and because a result is a dataset row, that row was billed as a result. It is not any more: those notices are status messages and log lines. If you have automation that reads a "no new postings" row, read the run status message instead.

Are staffing agencies really filtered out?

They are filtered on both company name and job description text, and anything that survives is labeled in company_type. If you would rather judge for yourself, turn the filter off and filter on that field.

Will a scheduled run keep showing me the same postings?

No. Cross-run delta detection means re-runs only emit postings you have not seen. is_new_posting carries the flag.

What happens if the enrichment sub-actors fail?

The row is still emitted with null enrichment fields and a structured error is logged. Discovery is never lost to an enrichment failure.

๐Ÿงฉ Want other GTM data?

Mamba Labs builds custom actors for B2B go-to-market teams. The public versions of that work live here on the Store, so our users get the same tooling we build under contract.

๐Ÿ•ต๏ธ Agent Accessibility Auditor๐Ÿค– AI Tooling Detector
๐Ÿ“ก B2B Buying Signals Aggregator๐Ÿš€ Prospect Engine
๐Ÿ“ Publishing Frequency Tracker๐Ÿฆ‹ Bluesky Brand Presence Mapper
โฉ Sequencer Lead Push๐Ÿ”„ Company Change-Event Feed
๐Ÿ“‡ Company Contact Details Extractor๐Ÿงญ Company Discovery List Builder
๐Ÿข Company Firmographic Enricher๐Ÿชช Company Identity Resolver
๐ŸŒ Company Social Presence Mapper๐Ÿท๏ธ Contact Classifier
๐Ÿ“ฌ Domain Deliverability Checker๐Ÿ”— Domain to LinkedIn URL Resolver
๐Ÿ›’ Ecommerce Platform Profilerโœ‰๏ธ Work Email Waterfall Finder
๐ŸŽช Event Presence Index๐Ÿ’ต Funding Record and Filings
๐Ÿ’ฐ Funding and Press Signal Scanner๐Ÿ™ GitHub Organization Signal Scanner
๐Ÿง‘โ€๐Ÿ’ผ GTM Hiring Signal Scraper๐Ÿงฑ Tech Stack Detector
๐ŸŽฏ ICP Fit Scorer๐Ÿ”‘ Job Board Keyword Scanner
โš–๏ธ Legal Entity Resolver๐Ÿ’ผ LinkedIn Company Page Mapper
๐Ÿ’ฌ LinkedIn Post Tracker and Comment Capture๐Ÿ“ข Meta Ad Library Monitor
๐Ÿ“ธ Instagram and Facebook Brand Mapper๐Ÿ“ฎ Outbound Stack Detector
๐Ÿ“„ Page Finder and Extractor๐Ÿ‘ค People Finder and Email Verifier
๐Ÿ“Œ Pinterest Brand Presence Mapper๐Ÿ›๏ธ Government Contract Award Monitor
๐Ÿ“… Public Company Reporting Window Finder๐Ÿ‘ฝ Reddit Brand and Mention Monitor
โญ Trustpilot Reputation Enricher๐Ÿ‘ฅ Team Page People Extractor
๐ŸŽต TikTok Brand Presence Mapper๐Ÿ“ˆ Website Traffic Rank Estimator
๐Ÿ… Workplace Program Detectorโœ–๏ธ X Twitter Brand Presence Mapper
โ–ถ๏ธ YouTube Channel Stats Extractor

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.

๐Ÿ› ๏ธ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.

๐Ÿ†˜ Support

Something wrong, or a company misclassified? Open an issue on the Issues tab with the keyword and the row, and we will look at it.

โ„น๏ธ Sourcing and legal. Job postings come from the SerpAPI google_jobs engine against your own key, and from public job board APIs. Company enrichment comes from Mamba Labs fleet actors reading public company data. The actor stores no personal data: it returns companies, roles and postings, not people. You are responsible for how you use the output.

Built by Mamba Labs.