Signals & Workflows
Save a search as a Signal and get new matching jobs or companies, or companies that start hiring for a technology, by email, Slack or webhook, or start from a Workflow template.
A Signal is a saved search that JobsPipe keeps checking for you. When new postings match, it tells you by email, Slack or webhook. Manage Signals in the dashboard under Signals, or from an AI assistant with the MCP tools create_signal and list_signals. Signals have no public REST endpoint. They cost no credits.
What a Signal watches
Every Signal has:
- Filters: the same filters as jobs search. At least one filter is required. Paging and sorting are not saved.
- A mode:
- Every new matching job (
jobs): one match per new posting. - Companies that start hiring (
companies): one match per company, the first time any of its postings matches. The company is not reported again. - Companies adopting a technology (
technology_adoption, beta): one match per company and technology, the first time an established company starts hiring for it. See Technology adoption. - Layoff notices (
layoff_notice, not yet available): one match per new US WARN Act notice that matches. See Layoff notices.
- Every new matching job (
- An intent (optional, up to 500 characters): a plain-language description of a relevant match, e.g. "companies adopting NetSuite in their own stack, not consultancies". AI checks each new match against it and drops the ones that don't fit. If the check cannot run, nothing is sent and the matches are checked again on the next run.
Each posting or company is delivered once per Signal.
Technology adoption
Beta, early access. Book a call to join. Until it is enabled for your account, a technology_adoption Signal cannot be created.
A technology_adoption Signal tells you when a company starts hiring for a technology, for example its first posting that names Snowflake with enough evidence. A companies Signal on a skills filter would instead report every company already using it.
It takes these filters only; job filters such as job_title_or are refused:
| Filter | Required | Description |
|---|---|---|
technology_slug_or | Yes | 1 to 10 technology slugs, e.g. ["snowflake", "dbt"], as listed by GET /v1/technologies. An unknown slug is refused. |
company_country_code_or | No | ISO country codes of the postings that name the technology, e.g. ["DE"]. A company that already used the technology elsewhere is reported when it starts hiring for it in these countries. |
tier_min | No | Weakest evidence tier that counts: confirmed (default) or likely. |
min_prior_jobs | No | Postings the company must have published before its first posting naming the technology. Default 5. |
A company counts as adopting only if it was already hiring: its first posting in JobsPipe is at least 90 days older than the first posting naming the technology, and it published at least min_prior_jobs postings before that. A company that named the technology more than a week before you created the Signal is never reported.
Each company and technology pair is reported once, dated by the first posting that named it. The report comes when a new posting brings the evidence up to tier_min, as long as the first mention is at most 90 days old. These Signals are checked about once an hour. They cannot have an intent.
Each match names the company (with its website and JobsPipe company page when its domain is confirmed), the technology, the evidence tier, the number of postings naming it and the adoption date. See Webhooks → alert.matched for the payload.
Layoff notices
Not yet available. This mode is not open yet; until it is, creating a layoff_notice Signal answers that the mode is not enabled.
A layoff_notice Signal tells you when a new US WARN Act notice of a mass layoff or closure is filed that matches it: for a company you watch, or for any company in a state. It covers the same notices as GET /v1/layoffs. Once available, create one from an AI assistant with create_signal.
It takes these filters only, at least one of them; job filters such as job_title_or are refused. Every filter given must hold:
| Filter | Description |
|---|---|
state_or | Two-letter US state codes, e.g. ["CA", "TX"]. |
company_or | Up to 100 companies, each a company key (the digits any company or job response carries) or a website domain, e.g. ["google.com"]. Only notices matched to one of them fire. |
min_employees | Only notices affecting at least this many employees. A notice without a count is left out. |
kind | layoff, closure (the site or plant closes) or unknown (the notice does not say). |
States publish their notices on their own schedules and JobsPipe reads them weekly, so a notice is reported in the days after the state lists it, not on its notice date. Each notice is reported once. A notice that comes to match within 14 days of first being seen (its company is matched, or the state amends its employee count) is reported then. Notices JobsPipe saw before the day you created the Signal are never reported. These Signals are checked about once an hour. They cannot have an intent.
Each match carries the employer, where, the notice and effective dates, the employees affected, the kind, and the company with its JobsPipe company page when it is matched. See Webhooks → layoff_notice items for the payload.
Save a search as a Signal
- Run a search in Search.
- Click Save as Signal above the results.
- Fill in the dialog:
- Name: pre-filled from your search.
- Tell me about: Companies that start hiring or Every new matching job.
- Email: where to send matches.
- How often: Daily digest or As soon as they appear.
- (Optional) Click Preview how noisy this is to see how many postings matched in the last 30 days.
- Click Save signal.
Signals saved from Search deliver by email. To use Slack or a webhook, or to add an intent, create the Signal from Workflows.
Workflows
Workflows sets up a Signal from a template or from a chat. Every workflow appears in Signals.
- Browse templates. Pick a ready-made watch, fill in its fields and click Create workflow. Templates cover sales and lead gen, recruiting, competitive intel, job boards and feeds, job seekers and research. Many come with an editable intent under What makes a match relevant? (AI-filtered).
- Chat. Describe what you want to watch. The assistant proposes the mode, cadence, filters, intent and a 30-day match count. Nothing is created until you choose a destination and click Create workflow.
Both let you choose the destination (Email, Slack or Webhook).
Destinations
Each Signal delivers to one destination. To send the same search to two places, create it twice.
| Destination | Target | Plan | What is sent |
|---|---|---|---|
| An email address | All plans | Up to 10 matches, and a count of the rest | |
| Slack | A Slack incoming webhook URL (https) | Builder and above | Up to 10 matches in one message |
| Webhook | A public https URL | Builder and above | Signed alert.matched events of up to 25 matches each |
A webhook destination gets its own whsec_ signing secret, shown once after you create the Signal. The same dialog shows whether a signed alert.test reached your URL, so a wrong address or an auth wall shows up before any match is sent. See Webhooks → alert.matched for the payload, signatures and retries, and Slack as a Signal destination.
Signal emails stop if you turn off Job alerts under Settings → Preferences.
Cadence
| Option | Cadence | When matches are sent |
|---|---|---|
| As soon as they appear / within hours | instant | Within hours of discovery. Checks run every few minutes, but discovery itself lands in batches a few times a day, so new matches arrive in bursts rather than one by one. |
| Daily digest | daily | Once a day from 09:00 UTC, covering everything since the last digest. Nothing is sent on days with no matches. |
Manage Signals
The Signals page lists each Signal with its filters, mode, destinations and last check. Each destination shows its delivery count and the outcome of the latest attempt, e.g. "46 delivered, last HTTP 200" or "Paused: last attempt got HTTP 401". For each Signal you can:
- Pause or resume it. A paused Signal sends nothing.
- Edit it (pencil icon): name, titles and excluded titles, sources and excluded sources, countries, seniority, work arrangement and the intent. Anything else stored on the Signal can be changed under Edit as JSON. Changes apply from the next check; the Signal keeps its id, destinations and webhook secret.
- Show full signal: every value of every filter, one row each (titles, excluded titles, sources, excluded sources, countries, work arrangement and so on), and the intent text when one is set. The card itself shows a short summary.
- Delivery log: the newest 200 deliveries, each with its time, status and HTTP answer, and the postings it carried (title, company, posting id and link). Download CSV gives the same as one line per posting, so you can compare it with what your endpoint received. Email and Slack deliveries are stored as the rendered message, so they list no postings. Below the deliveries, filtered out by the intent check counts the matches the AI intent check left out and lists the newest 200 with the judge's reason, so a posting that matched the filters but never arrived can be looked up. The same log is
GET /api/alerts/:id/deliveries:deliveries,rejectedandrejected_count. - Delete it.
The same change is available as PATCH /api/alerts/:id with a JSON body of filters, intent or name. Destinations and cadence can't be changed; add a new Signal for a new destination. A failed checks badge means recent checks could not run; the Signal retries on the next check.
A destination is paused when a delivery fails all 6 attempts (about 8.5 hours) and it accepted nothing in the previous 24 hours. You get an email. Matches found while it is paused are not delivered. Fix the endpoint, then click Resume next to the destination.
Limits
| Plan | Signals | Slack and webhook destinations |
|---|---|---|
| Free | 3 | Not available |
| Builder, Growth | 10 | Available |
| Scale, Business | 50 | Available |
Paused Signals count toward the limit.