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

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Find the companies hiring for any role right now. Give it keywords like software engineer, product manager, or account executive, and it scans job boards, deduplicates to one clean row per posting, filters out staffing agencies and freelance marketplaces, and enriches every company with its domain, LinkedIn URL, employee count, and industry. The output is a flat, Clay-ready dataset you can route straight into outreach.

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?" It is built to replace a TheirStack plus Clay pipeline: keyword monitoring, company enrichment, and delta detection in one actor. Discovery runs on the SerpAPI google_jobs engine, so you bring a SerpAPI key (free tier covers 250 searches per month, well under the cost of a TheirStack subscription).

The keyword array is fully generic: any set of role titles works. Editorial and content hiring (proofreader, copy editor, managing editor) is one popular preset and ships as the default, but the same actor tracks engineering, sales, marketing, operations, or any other function just by changing the keywords.

Features

  • Keyword-driven discovery for any role via the SerpAPI google_jobs engine (Google Jobs coverage of Indeed, LinkedIn, Glassdoor, ZipRecruiter, and company career pages).
  • One flat, deduplicated row per posting, keyed on company plus normalized job title. Clay-native, no nested JSON.
  • Company firmographic enrichment baked in: domain, company LinkedIn URL, employee count, industry.
  • Staffing and recruitment agency filtering on both company name and job description text.
  • Freelance marketplace exclusion (Upwork, Fiverr, and similar) so you keep direct-employer signal only.
  • Company type classification: direct_employer, staffing_agency, government, or unknown.
  • Cross-run delta detection: re-runs only emit postings you have not seen before.
  • Lookback window, company-size range, remote-only, and country filters.
  • Self-contained: no Clay table and no TheirStack subscription. A SerpAPI key is the only external dependency.

Input

FieldTypeRequiredDefaultDescription
keywordsarrayyes["proofreader", "copy editor", "content editor"]Role titles to search for. Any role works; the editorial default is one common preset.
countrystringnoUnited StatesGeographic filter.
lookback_daysintegerno30Only return postings newer than this many days.
company_size_minintegernonullDrop companies smaller than this (when size is known).
company_size_maxintegernonullDrop companies larger than this (when size is known).
exclude_staffing_agenciesbooleannotrueFilter out staffing and recruitment agency postings.
exclude_freelance_marketplacesbooleannotrueFilter out postings from freelance marketplaces (Upwork, Fiverr, etc.).
freelance_marketplacesarraynoUpwork, Fiverr, Freelancer, Toptal, PeoplePerHour, Guru, 99designsCompany names treated as freelance marketplaces; override or extend as needed.
remote_onlybooleannofalseOnly return remote postings.
previous_run_datestringnonullISO date; only emit postings newer than this.
max_resultsintegerno100Upper bound on raw postings scanned before filtering.
max_companiesintegerno40Cap on unique companies enriched per run.
serpapi_keystringyes*nullSerpAPI key for Google Jobs discovery. *Required unless a SERPAPI_KEY environment variable is set on the actor.

The actor reads the key from the serpapi_key input first, then falls back to the SERPAPI_KEY environment variable. Without either, discovery returns nothing.

Output

FieldTypeDescriptionExample
company_namestringHiring company name.Stripe
company_domainstringResolved canonical domain, or null.stripe.com
company_linkedin_urlstringCompany LinkedIn page, or null.https://www.linkedin.com/company/stripe
employee_countintegerApproximate headcount, or null.8000
industrystringIndustry or sector, or null.Financial Services
company_typestringdirect_employer, staffing_agency, government, unknown.direct_employer
job_titlestringThe role title.Senior Software Engineer
job_urlstringDirect apply or posting URL.https://boards.greenhouse.io/example/jobs/123
posting_datestringISO date (YYYY-MM-DD), or null.2026-06-25
source_boardstringgoogle_jobs, greenhouse, lever, ashby.google_jobs
locationstringHuman-readable location, or null.San Francisco, CA
is_remotebooleanRemote flag, or null.true
job_description_snippetstringFirst 500 characters of the JD, or null.We are seeking a backend engineer to...
matched_keywordstringThe searched keyword this posting matched.software engineer
is_new_postingbooleanTrue when not seen in a prior run.true
run_datestringISO 8601 run timestamp.2026-07-01T14:06:22.297Z

Pricing

TierDiscountPer resultPer 1K results
Free (no plan)0%$0.020$20.00
Starter (Bronze)~5%$0.019$19.00
Scale (Silver)~10%$0.018$18.00
Business (Gold)~15%$0.017$17.00

Free tier: 25 result rows per month included.

A result is one deduplicated, firmographic-enriched job posting. Enrichment sub-actor usage (identity, firmographics, LinkedIn) is billed through your own Apify account at each sub-actor's own rate, standard for fleet orchestrators. Google Jobs discovery is billed by SerpAPI against your own SerpAPI key.

Usage Examples

Apify Console / API

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('mambalabs/gtm-job-discovery').call({
keywords: ['software engineer', 'product manager'],
country: 'United States',
lookback_days: 30,
exclude_staffing_agencies: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Swap the keywords array for any function you want to monitor: sales (account executive, sales development representative), marketing (growth marketer, demand generation), operations, finance, or editorial and content (proofreader, copy editor, managing editor), which is one popular use case this actor was first built for.

Clay Integration

  1. Add a "Write to Table" or "Enrichment" source and point it at this actor's dataset (or use the Apify Clay integration).
  2. Map one Clay row per output row. Key columns: company_name, company_domain, company_linkedin_url, job_title, posting_date.
  3. Use company_linkedin_url as the input to your LinkedIn outreach step, and posting_date plus is_new_posting to prioritize fresh signals.
  4. Schedule the actor and pass previous_run_date (or rely on the built-in delta cache) so each Clay refresh only ingests new postings.

MCP Integration

An MCP wrapper for this actor is planned as part of the Mamba Labs GTM Suite. Until then, call it through the Apify MCP server or directly via the Apify API as shown above.

Error Handling

ConditionBehaviorOutput
Discovery source returns nothingLogs a warning, emits zero rows, exits cleanly.Empty dataset.
Company name does not resolve to a domainRow is still emitted with null domain and null firmographics.company_domain, employee_count, industry null.
Firmographic or LinkedIn sub-actor failsLogs structured error, continues with null enrichment fields.Affected enrichment fields null.
Free-tier monthly cap reachedExits before any paid work with an upgrade message.No new rows.
KVS (usage or delta cache) unavailableFails open: proceeds without the cap or delta filter.All postings treated as new.

Limitations

  • 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 to bound sub-actor cost.
  • company_domain and downstream enrichment depend on name-to-domain resolution; ambiguous or very small companies may not resolve.
  • employee_count and industry coverage varies by company and is frequently null; the firmographic source only reports these when a company exposes them. The company_size_min / company_size_max filters apply only when a size is known. company_linkedin_url (the primary outreach field) resolves for the large majority of companies.
  • Discovery requires a SerpAPI key (free tier: 250 searches per month). Google Jobs coverage excludes some regions where the widget is disabled (for example the EU).
  • Posting dates from aggregated boards are often relative ("25 days ago") and are normalized to a best-effort ISO date.

Part of the Mamba Labs GTM Intelligence Suite

ActorActor ID
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Tech Stack Signal Enrichmentqyd7nNyqFPelQViBx
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
ICP Fit ScorerW161DT8W4kW55dMFh
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Social Presence Mapper4k6CCemkgBDz18m2h
Company Identity Resolverlr8fTRAmZCBZmuwwh
Funding & Press Signal ScannerFS13X6dhQVgX3XOM6
Company Change-Event FeedoX44rS0fkEJ3rXLWe
Job Posting MonitorQCfICD9kOPiOdj5iI

npm: @mambalabsdev/ats-scrapers

Built by Mamba Labs.