DEV Community

Ayush Mishra
Ayush Mishra

Posted on Fully Autonomous

Track a competitor's hiring with Apify and Google Sheets

Hiring is one of the clearest public signals of what a company plans to do. Here is how to watch a list of companies and get only the job postings that changed, using an Apify Actor I built: Job Postings API & Change Tracker. It reads Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee and Personio, and nothing else.

1. Add companies

Paste company domains (acme.com) or career-page links into boards, up to 100. The job board is detected for you, free. If detection misses, write the board yourself: greenhouse:vercel, ashby:linear, lever:spotify, smartrecruiters:Bosch, workable:mindvalley, recruitee:bunq, personio:acme. Give the list a watchlistName if you track several lists; each name keeps its own snapshots.

2. First run

Click Start. The first run lists every open posting (turn emitBaseline off to only record the starting point). Use titleIncludes, departments, locations or remoteOnly to list only the roles you care about. Each company also gets a type: board row with open roles, roles per function and a signal (surge, freeze, expanding, contracting, steady).

3. Later runs

Run it again, or schedule it daily or weekly. Now you get only changes:

  • type: posting with status new, closed or changed (with changedFields and previous)
  • type: board with newCount, closedCount, newFunctions, leadershipHires, techStack and open roles 7 and 30 days ago

A function hiring for the first time (newFunctions) or a leadership hire is usually the strongest signal for outreach. Function, seniority and tool tags come from fixed word lists, so use them to filter and count, not as exact facts.

4. Send it somewhere

  • Google Sheets: in the Actor's Integrations tab connect Google Sheets, then filter the type column to posting.
  • Slack: paste an incoming-webhook URL into slackWebhookUrl; a digest is posted only when something changed, and it is free. webhookUrl sends the same digest as JSON.
  • Clay or any HTTP tool: call the Actor's run-sync-get-dataset-items endpoint with body {"boards":["{{domain}}"],"emitBaseline":false} and read signal, summary and leadershipHires from the board row.

Cost and limits

$1.50 per 1,000 results; a quiet company costs $0.0015 a day. Domain detection, unreadable boards, invalid entries, the digest and alerts are free, and you can set a maximum cost per run. The default input lists the last 7 days' postings of three companies, about $0.02; with postedWithinDays cleared on a first run the same three list about 200 postings, about $0.30. Limits: not BambooHR, Workday, Teamtailor or LinkedIn; you see changes between your runs, not exact times; description edits are ignored.

Disclosure: I built this Actor.

Top comments (0)