n8n-nodes-jobo-job-search is a community node package for n8n with two nodes:
- Jobo: on-demand steps. Job (Search, Get, Get Many (Feed), Get Expired), Company (Get), and Location (Geocode).
- Jobo Trigger: starts a workflow for each newly indexed job that matches your filters.
Get the node
npmjs.com/package/n8n-nodes-jobo-job-search
Install
1
Install the node
In n8n, go to Settings → Community nodes → Install and enter
n8n-nodes-jobo-job-search. On self-hosted n8n you can also run:2
Add your credentials
Create a Jobo API credential with a key from Developers → API Keys in the dashboard. Its test runs a search with
page_size=1, so it needs almost no balance.Use a live key (jbe_live_…) for Get Many (Feed), Get Expired, Location → Geocode, and the location and filter suggestions (sandbox keys).3
Add a node
Use Jobo for steps inside a workflow, or Jobo Trigger to start one for each new matching job.
4
Configure the trigger
Set at least one of Query, Location, Companies, Occupations, Sources, Skills, Industries, Job Categories, or Job Subcategories; the trigger won’t run without one. Leave Minimum Interval at Every Hour unless you need faster alerts (why).
Which operation to use
An outbound feed delivers all jobs or one of your saved feeds. It bills like Feed, with no per-job charge on the Unlimited plan.
Operations
Expired Since defaults to 24 hours ago and can’t be more than 7 days back. Get Expired follows
next_cursor through every page of GET /api/jobs/expired, 1,000 ids at a time. The ids cover the whole index, not just your jobs, so a long window returns many items. On a schedule, set Expired Since to just before the previous run.
Get Many (Feed) keeps no cursor between executions: each run starts at the beginning of the feed and stops at Limit unless Return All is on. For a scheduled sync, turn on Return All and set Updated After to just before the previous run, for example {{ $now.minus({ minutes: 65 }).toISO() }} on an hourly schedule. Without Updated After, every run delivers and bills the same jobs again.
Filters
Search and the trigger take every filter ofPOST /api/jobs/search. Get Many (Feed) takes every filter of POST /api/jobs/feed.
- Companies: picking a company from the list sends every Jobo company id it has (one per career site), which matches that company and not others of the same name. By Name or Domain takes a company id, a website domain such as
stripe.com, or a whole company name; a name also matches other companies called that. Unmatched entries are written to the n8n log ascompanies_unmatched. - Occupations take ids such as
jobo:backend-developeroresco:<uuid>; search the list by occupation, subcategory, or category name. Job categories and subcategories take names such asHealthcareandNursing.GET /api/occupationslists every value. - Exclude leaves out jobs matching any listed value. Values a job doesn’t have, such as an unknown work model, never match an include list and are kept by an exclude list.
- Work model: remote, hybrid, onsite. Employment type: full-time, part-time, contract, internship, freelance, temporary. Experience level: intern, entry, mid, senior, lead, executive.
- Salary filters match only jobs whose employer published a range, a minority of listings, so they cut results sharply.
- Turn off Search Descriptions to match the query against titles only. In Query, quote a phrase for an exact title match and prefix a word with
-to exclude it. - Simplify returns the core job fields plus the short summary, without the full description, qualifications, responsibilities, and benefits. Use it when the node is an AI agent’s tool.
Node versions
New Jobo and Jobo Trigger nodes are version 2, where Skills is a dropdown. Nodes saved by 0.2.0 and earlier stay version 1, keep Skills as free-entry chips, and run as before; every other new field appears in both versions. To get the Skills dropdown in an existing workflow, add the node again.Poll Times vs Minimum Interval
n8n adds a Poll Times field to every polling node. Its default, Every Minute, is hard-coded, and a node can’t change it. Left alone, it would call the API 1,440 times a day. The trigger’s own Minimum Interval decides instead: Every 15 Minutes, Every 30 Minutes, Every Hour (the default), Every 6 Hours, or Every 24 Hours. A tick that arrives sooner is skipped without a request.
No job is missed at any interval, and cost stays about the same: you pay per new job, not per poll. One poll returns at most 250 new jobs, oldest first; when more match, the next polls carry on where it stopped.
Cost
Search, Get Many (Feed), and the trigger bill per job returned, and an empty poll costs nothing (cost model). Three cases bill more than you might expect:- Testing the trigger in the editor returns, and bills, up to 25 matching jobs indexed in the last hour. It doesn’t move the watermark.
- Each poll re-reads, and bills, any matching jobs indexed in the minute before the previous poll’s last job, so a late-indexed job isn’t missed. They aren’t emitted twice.
- Get Many (Feed) without Updated After bills the same jobs on every run: up to Limit, or every match with Return All.
Troubleshooting
Related: MCP server
For conversational job search instead of a scheduled workflow, use an MCP client.

