Schedule the Weekly Run
Outcome: a scheduled job that finds new postings, gates them, enriches the survivors and delivers a weekly digest — costing roughly 60 credits a week rather than a full rebuild.
- Surface
- App
- Level
- Intermediate
- Uses
- Scheduled runs · the columns from lessons 02–07
- Credits
- ~60 per week
- Prerequisite
- Lessons 02–07
Why weekly
Job posts have a 30-day useful window and get filled inside it. Weekly detection means you find a post on average within four days of it going live — comfortably inside the window, with time to act.
Monthly detection means the average post is already two weeks old when you see it, and a meaningful share are filled.
The seen/unseen filter
The mechanism that keeps the weekly run cheap: only process postings you have not processed before.
Key each posting
Company + normalized title + posted date. Store it.
On each run, compare
Anything matching an existing key is a repost or a duplicate — skip it.
Process only the new
New postings get the growth, department and scoring columns. Everything else is untouched.
Do not re-enrich known accounts
If an account already has verified contacts, a new posting at the same account needs a new message, not new contact data.
Without the seen filter, the weekly run re-processes the entire back catalogue every week — and the cost grows as your history grows. This is the single most common way a scheduled signal pipeline becomes expensive, and it does not look like a mistake because the output is correct.
What re-runs and what does not
| Column | Cadence | Why |
|---|---|---|
| Job posting search | Weekly | The signal |
| Openings and headcount growth | Monthly | Slow-moving; and only for new accounts weekly |
| Department headcount | Quarterly | Slow, and it is a gate not a trigger |
| Score | Weekly | Free, and decay changes it |
| People search | On newly gated accounts only | Expensive |
| Email + verify | On new contacts only | Most expensive |
| Copy | On new postings, for existing contacts too | A new post is a new reason |
Note the last row: an existing contact at an account with a new posting gets a new message, without new contact spend. That is the cheapest lead in the whole pipeline.
The weekly cost
For a play watching a market and processing roughly 40 new postings a week:
| Step | Rows | Cost | Total |
|---|---|---|---|
| Posting search | — | — | ~5 |
| Growth + department on new accounts | 15 | 3 | 45 |
| Score and gate | — | 0 | 0 |
| People on gated accounts | ~10 | 0.6 | 6 |
| Email + verify | ~10 | 1.2 | 12 |
| Copy | ~15 | 1 | 15 |
| ~83 |
Against a full re-run of everything, which would cost several times that and produce the same 10–15 actionable accounts.
The digest
Nobody reads the table. Send five lines:
Hiring signals — week of <date>
38 new postings matched
15 new companies
9 passed the gate
14 contacts verified
3 accounts with a repeat posting (existing contacts, new angle)
Top account: <name> — first RevOps hire, 40-person sales teamRoute it to Slack. The last line matters most: one named account with its reason is what turns a report into an action.
Do this now
Build the posting key
Company + normalized title + date.
Add the seen/unseen filter
Test it by running twice and confirming the second run processes nothing new.
Set per-column cadences
Weekly, monthly, quarterly.
Schedule the run
Early in the week, so the queue is ready when people are.
Build the digest
Five counts plus one named account.
Route it to Slack
Check consumption on runs two and four
That is when a cadence mistake becomes visible and is still cheap.
Check your work
- Running twice in succession processes nothing the second time
- Every column has a cadence
- Existing contacts get new copy on a new posting, without new contact spend
- A digest is delivered somewhere people read
- You compared credit consumption across the first four runs
Where this breaks
A scheduled run that fails silently is worse than one that never existed, because everyone assumes the pipeline is working. If the posting search returns zero one week — an API change, an expired credential, a filter that stopped matching — the digest should say so loudly rather than reporting a quiet zero. Alert on an empty run, not just on an error.
Course complete
You now have a hiring-signal pipeline that searches openings by role and geography, separates build-out from backfill with growth rates, sizes the target department, finds the buying committee from the posting itself, writes from the consequence rather than the fact, gates the spend on a score, and runs weekly without anyone starting it.
Where to go next:
| You want | Course |
|---|---|
| More trigger types on the same accounts | Signals & ABM |
| To catch the new hire rather than the hirer | Job Changes & Champions |
| The account universe underneath | TAM Sourcing |
| To run the chain from chat | AI for Sales Reps |
Reference for this lesson: company_job_listings, Is hiring, Workspace integrations, Credits.