Job Posting Monitor Clay-Ready Hiring Signal Discovery
Pricing
from $17.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| keywords | array | yes | ["proofreader", "copy editor", "content editor"] | Role titles to search for. Any role works; the editorial default is one common preset. |
| country | string | no | United States | Geographic filter. |
| lookback_days | integer | no | 30 | Only return postings newer than this many days. |
| company_size_min | integer | no | null | Drop companies smaller than this (when size is known). |
| company_size_max | integer | no | null | Drop companies larger than this (when size is known). |
| exclude_staffing_agencies | boolean | no | true | Filter out staffing and recruitment agency postings. |
| exclude_freelance_marketplaces | boolean | no | true | Filter out postings from freelance marketplaces (Upwork, Fiverr, etc.). |
| freelance_marketplaces | array | no | Upwork, Fiverr, Freelancer, Toptal, PeoplePerHour, Guru, 99designs | Company names treated as freelance marketplaces; override or extend as needed. |
| remote_only | boolean | no | false | Only return remote postings. |
| previous_run_date | string | no | null | ISO date; only emit postings newer than this. |
| max_results | integer | no | 100 | Upper bound on raw postings scanned before filtering. |
| max_companies | integer | no | 40 | Cap on unique companies enriched per run. |
| serpapi_key | string | yes* | null | SerpAPI 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
| Field | Type | Description | Example |
|---|---|---|---|
| company_name | string | Hiring company name. | Stripe |
| company_domain | string | Resolved canonical domain, or null. | stripe.com |
| company_linkedin_url | string | Company LinkedIn page, or null. | https://www.linkedin.com/company/stripe |
| employee_count | integer | Approximate headcount, or null. | 8000 |
| industry | string | Industry or sector, or null. | Financial Services |
| company_type | string | direct_employer, staffing_agency, government, unknown. | direct_employer |
| job_title | string | The role title. | Senior Software Engineer |
| job_url | string | Direct apply or posting URL. | https://boards.greenhouse.io/example/jobs/123 |
| posting_date | string | ISO date (YYYY-MM-DD), or null. | 2026-06-25 |
| source_board | string | google_jobs, greenhouse, lever, ashby. | google_jobs |
| location | string | Human-readable location, or null. | San Francisco, CA |
| is_remote | boolean | Remote flag, or null. | true |
| job_description_snippet | string | First 500 characters of the JD, or null. | We are seeking a backend engineer to... |
| matched_keyword | string | The searched keyword this posting matched. | software engineer |
| is_new_posting | boolean | True when not seen in a prior run. | true |
| run_date | string | ISO 8601 run timestamp. | 2026-07-01T14:06:22.297Z |
Pricing
| Tier | Discount | Per result | Per 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
- Add a "Write to Table" or "Enrichment" source and point it at this actor's dataset (or use the Apify Clay integration).
- Map one Clay row per output row. Key columns:
company_name,company_domain,company_linkedin_url,job_title,posting_date. - Use
company_linkedin_urlas the input to your LinkedIn outreach step, andposting_dateplusis_new_postingto prioritize fresh signals. - 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
| Condition | Behavior | Output |
|---|---|---|
| Discovery source returns nothing | Logs a warning, emits zero rows, exits cleanly. | Empty dataset. |
| Company name does not resolve to a domain | Row is still emitted with null domain and null firmographics. | company_domain, employee_count, industry null. |
| Firmographic or LinkedIn sub-actor fails | Logs structured error, continues with null enrichment fields. | Affected enrichment fields null. |
| Free-tier monthly cap reached | Exits before any paid work with an upgrade message. | No new rows. |
| KVS (usage or delta cache) unavailable | Fails 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 tighterlookback_days. - Company enrichment is capped per run by
max_companiesto bound sub-actor cost. company_domainand downstream enrichment depend on name-to-domain resolution; ambiguous or very small companies may not resolve.employee_countandindustrycoverage varies by company and is frequently null; the firmographic source only reports these when a company exposes them. Thecompany_size_min/company_size_maxfilters 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
| Actor | Actor ID |
|---|---|
| GTM Hiring Signal Scraper | D7O1SA2EqwHGsGr1P |
| GTM Tech Stack Signal Enrichment | qyd7nNyqFPelQViBx |
| GTM Signals Aggregator | xKdRfnfFNkdMpFuNs |
| Job Board Keyword Signal Scanner | 4DvqpvhMR74NLcDDY |
| Domain to LinkedIn URL Resolver | 3HtnSaqPHOg1Qg5gx |
| ICP Fit Scorer | W161DT8W4kW55dMFh |
| Domain Deliverability Checker | 0tVgxI7A6o9jMlxmc |
| Company Firmographic Enricher | YlUtLWjfPpqykmB8g |
| Company Social Presence Mapper | 4k6CCemkgBDz18m2h |
| Company Identity Resolver | lr8fTRAmZCBZmuwwh |
| Funding & Press Signal Scanner | FS13X6dhQVgX3XOM6 |
| Company Change-Event Feed | oX44rS0fkEJ3rXLWe |
| Job Posting Monitor | QCfICD9kOPiOdj5iI |
npm: @mambalabsdev/ats-scrapers
Built by Mamba Labs.