---
title: "Changelog - JobsPipe"
description: "What we shipped, when, and what it changes for your integration."
canonical: https://jobspipe.dev/changelog
---

Changelog

# What we shipped.

Engineering notes for every release. Subscribe to [the blog](https://jobspipe.dev/blog) to get changelog entries by email.

## More ways to sign in: passkeys, single sign-on, GitLab and Bitbucket

-   ·Sign in with a passkey (Face ID, Touch ID, Windows Hello or a security key), GitLab or Bitbucket, next to Google, GitHub and the emailed code. Add a passkey under Settings, Security.
-   ·Workspace owners and admins can connect a SAML or OIDC identity provider under Settings, Members. Once the email domain is verified with a DNS record, everyone signing in with that domain joins the workspace.
-   ·The method you used last is marked Last used on the sign-in page.

## A redesigned dashboard, sign-in and onboarding

-   ·The dashboard has a new look: a lighter layout with the page in a white panel, smaller and more consistent buttons, inputs, badges and table rows, and one icon set throughout.
-   ·Home has a larger assistant prompt and illustrated getting-started cards. Sign-in, sign-up and the onboarding steps use the same design.
-   ·Nothing moved: every page, filter and setting is where it was, and dark mode is still available from the top bar.

## Filter by Teamtailor, Pinpoint and HireHive

-   ·source\_or and source\_not now accept teamtailor, pinpoint and hirehive as ATS sources, so you can search the postings on company career sites that run on those platforms, or leave them out.
-   ·All three are listed in the filters reference, the API reference and the MCP search\_jobs tool, and appear in the dashboard's source picker.

## Rise and Bayt are listed sources

-   ·source\_or and source\_not now document rise and bayt as job boards, in the filters reference, the API reference and the MCP search\_jobs tool.
-   ·Both appear in the dashboard's source picker. Bayt covers the Middle East and North Africa.

## n8n workflow templates

-   ·Four n8n workflows to import from docs.jobspipe.dev/integrations/n8n: a daily new-jobs feed to Google Sheets, Signal webhooks to Slack with signature verification, weekly company hiring counts, and an AI Agent on the JobsPipe MCP server.
-   ·The page shows how to set up the API key as a Header Auth credential and how to write an HTTP Request JSON body with expressions that stays valid JSON.

## technology\_slugs lists named technologies only

-   ·technology\_slugs now contains named technologies only: languages, frameworks, products, tools and platforms such as python, kubernetes or snowflake.
-   ·Concepts such as CI/CD or machine learning remain in keyword\_slugs, which is unchanged and still carries every skill.

## Delete your account from the dashboard

-   ·Settings → Profile → Delete account permanently deletes your account after you type DELETE.
-   ·Any subscription is cancelled immediately, every API key and session is revoked, and your profile, sign-in methods, signals, webhooks and chat history are erased.
-   ·Invoices and payment records required for tax are kept without your name or email.

## Checkout states the renewal terms

-   ·Subscription checkout says, next to the pay button, that your package renews automatically every month at its price until you cancel.
-   ·It also says how to cancel: Settings → Billing → Manage billing, effective at the end of the current period.

## MCP: search now answers with agentic search

-   ·The MCP server's search tool sends the request to agentic search instead of matching it against job titles, so a request like "RN jobs in Austin posted by staffing agencies, not hospitals" returns agency postings ranked by fit.
-   ·Results keep the same id, title and link shape and cost the same: one credit per posting returned. If agentic search cannot answer, search falls back to title matching. search\_jobs is unchanged.

## Agentic search: describe the job in a sentence, get the postings that fit

-   ·POST /v1/jobs/agentic-search takes one plain-language request and returns up to 25 postings ranked by fit, each with a relevance score, the judgments behind it, and an uncertain flag when the role judgment is borderline.
-   ·It plans structured searches using the titles employers actually post, checks hard rules such as country, posted pay and posting date on the stored record, and reads every candidate against the role, level and conditions you gave. It keeps the place you asked for across rounds.
-   ·Billed like search: one credit per posting returned, postings already paid for this month free, nothing for candidates it read but did not return. A request with nothing relevant returns an empty page and costs nothing.
-   ·Most requests answer in 5 to 15 seconds; allow 30. Limited to 10 calls a minute per account. Nothing was renamed and no ids changed.

## Lever postings now carry their full text

-   ·A Lever posting is written in three parts: an opening section, the titled lists an employer fills in (responsibilities, requirements, benefits), and a closing note. We stored only the opening.
-   ·Across a sample of live postings that was 26% of the text. Where an employer put everything into the lists, the description we stored was the job title alone.
-   ·All three parts are now stored with their headings, so description\_or reaches the requirements and a posting reads the way the employer wrote it. SmartRecruiters postings gain their company section in the same change.
-   ·Postings refresh as they are next collected, within a few hours. Nothing was renamed and no job ids changed.

## MCP: compact results, what a call cost, and signals from an agent

-   ·search\_jobs answers compact rows by default: the fields a list of results is read for, with the description cut to a snippet and marked description\_truncated, so a search no longer fills an agent's context with whole postings. Pass detail: "full" for every field, or read one posting with fetch.
-   ·search and fetch now say what they cost: a usage block on a search, and credits\_charged and jobs\_already\_paid on a fetched document. Both are absent on an account that is not billed per job.
-   ·create\_signal and list\_signals are documented and answer one consistent shape. create\_signal takes an idempotency\_key, so a retried call replays the signal already saved instead of creating a second one, and a webhook destination's signing secret is returned once, at creation.
-   ·search\_jobs exposes filters that were only reachable over REST: employer\_type\_or and employer\_type\_not, min\_employee\_count, max\_employee\_count and include\_unknown\_size, company\_name\_partial\_match\_or, job\_country\_code\_not, posted\_at\_lte, last\_verified\_max\_age\_days, include\_unknown, status, and cursor for paging.

## GET /v1/account, and a get\_account\_info MCP tool

-   ·A credential can now say whose it is. GET /v1/account returns the account behind an API key or OAuth token: email, plan, this month's allowance, credits used and left, extra credits, and the plan's per-request and per-second limits.
-   ·It costs no credits and does not count against the per-second rate limit, so it is safe to call before a large search.
-   ·The MCP server exposes the same answer as get\_account\_info, so an agent connected over OAuth can check which account it is signed in to before it spends anything.

## coordinates\_source on every posting, and city-centre coordinates switching on

-   ·latitude and longitude are filled for the boards that publish them, nearly half of all postings. City-centre coordinates are being switched on now: as they are, postings whose city is known come back mappable even from boards that publish no coordinates at all - LinkedIn among them.
-   ·coordinates\_source says which kind you are looking at: source is the pair the job board published for that posting, city\_centroid is the middle of the city and is not the employer's address, and null means the posting has no coordinates.
-   ·A pair published by the source always wins over the city centre, even where they disagree.
-   ·No centroid is invented for a country, a state, a metro area or a value like Remote in the city field, and that includes the city-states, where the city name is also the country name - Singapore, Hong Kong and Macau keep null coordinates. City-centre coordinates use the GeoNames geographical database (CC BY 4.0).

## Company revenue, legal identity and entity type on every job

-   ·company\_object gains an intelligence object: revenue\_usd, revenue\_year, revenue\_source and revenue\_confidence, plus entity\_kind (company, branch, public\_sector, staffing\_agency), founded\_year, headcount, industry and lei.
-   ·revenue\_confidence says how far to trust the figure: filed (statutory accounts), reported (stated by the company), band (an estimated range, midpoint published), derived (from funding or valuation) or extracted (from public text).
-   ·It is resolved for the posting's company in the posting's country, is null when there is no record, and each field inside is null when unknown.
-   ·company\_object.url, logo, linkedin\_url and employee\_count are now also filled from the company's resolved profile, so they appear on postings collected before the company was resolved. Additive; nothing renamed.

## A request log in the dashboard

-   ·The Usage page has a new Recent activity section: every API request your account made in the last 90 days, with what you sent and what it cost.
-   ·Credits by hour or by day, stacked by API key. A burst of usage is one tall bar, and clicking it shows the requests behind it.
-   ·Requests that cost nothing say why: already paid, no results, over quota, rate limited or refunded.
-   ·Search what you sent or look up a request id, and filter by window, key, status, endpoint and cost. Open a request to see its full body, request id and error, and download the result as CSV. API keys are redacted and responses are not stored.

## A job is charged once per calendar month

-   ·One credit now buys a job for the rest of the month. When a job your account already paid for comes back, because you re-ran a query, polled for new postings, opened it again or it was re-checked and re-delivered, it costs nothing.
-   ·It applies across every API key on the account, the dashboard and the MCP server, and resets with your allowance at the start of each calendar month (UTC).
-   ·Every search response reports what it cost: metadata.credits\_charged, and metadata.jobs\_already\_paid for the jobs that were free. Together they equal the jobs returned.
-   ·Nothing to change in your integration, and no call costs more than it did. Jobs paid for earlier this month, before this change, are not on record, so each may be charged at most once more.

## Preview mode removed: every search returns the full record

-   ·Searches no longer come back masked. Employer name, domain, links, description, recruiter emails and posted salary are in every response, and billing is unchanged at 1 credit per job returned.
-   ·blur\_company\_data is still accepted so existing integrations keep working, but it no longer masks anything and no longer makes a search free. A search that matches nothing still costs nothing.
-   ·The daily preview allowance is gone with it, so searches no longer return a 403 for exhausting it.
-   ·The dashboard shows complete results as soon as you search; there is no reveal step. /v1/jobs/reveal and /v1/jobs/revealed have been retired.

## Preview has a daily allowance that grows with your plan

-   ·Rows returned by blur\_company\_data searches still cost no credits, but each account now gets a daily preview allowance of twice its monthly credits, never less than 2,000 rows.
-   ·Free 2,000, Builder 50,000, Growth 200,000, Scale 600,000 and Business 1,000,000 preview rows a UTC day. Every API key on an account shares its one allowance.
-   ·Past the allowance, preview searches return a 403 that says when it resets (00:00 UTC). The same search without blur\_company\_data keeps working and is billed as usual.

## Filter by the language a posting is written in

-   ·New language\_or and language\_not filters take lowercase ISO 639-1 codes, e.g. \["en"\], and every job carries a language field.
-   ·It is the language of the posting, not of its country: English-language roles in Sweden or Germany are one filter away.
-   ·The dashboard's job search has a matching Language filter. Postings are still being labelled; include\_unknown: \["language"\] keeps the unlabelled ones.

## One city, one filter value

-   ·Every job carries normalized\_city, the canonical spelling of the city its location names: Munich for München, London for London Area or Mayfair.
-   ·New city\_or filter matches a whole city by name and normalises spellings server-side, so "Cracow" finds Kraków.
-   ·The dashboard's Location panel offers the regions and cities that hold jobs for each of its 31 countries, where it used to list US states and Canadian provinces only.

## Every source is filterable

-   ·source\_or, source\_not, the dashboard Source picker and the MCP tool accept all 27 sources with jobs in the index, up from 10: job boards, public employment services and company ATS career sites.

## Know what you are not seeing

-   ·include\_unknown keeps postings whose value is unknown for the fields you list, such as seniority, employment type, location or salary, instead of silently dropping them.
-   ·metadata.field\_coverage reports how much of the corpus carries each field you filtered on, overall and per source, so a small result reads as "we don't know" rather than "none exist".
-   ·last\_verified\_max\_age\_days keeps only jobs seen on their source recently, and jobs gained cities, every place a multi-location posting names.

## Four packages, and extra credits you buy once

-   ·Builder ($49 for 25,000 credits), Growth ($149 for 100,000), Scale ($348 for 300,000) and Business ($525 for 500,000) replace the choose-any-amount chooser. Same per-1,000 rates, four fixed points, so a package is something you can compare.
-   ·Buy credits: on any paid package, a one-time purchase of from 5,000 to 500,000 credits in steps of 5,000, at your package's own per-1,000 rate. Nothing renews, the credits never expire, and they are used after the monthly allowance.
-   ·Auto-recharge stays as an option beside it. Free cannot buy credits: pick a package first.
-   ·Accounts on Builder, Scale, a negotiated plan or a non-package amount keep their price until they pick a package.

## Choose your credits, and top-ups

-   ·One credits plan for new customers: pick an amount from 1,000 to 999,000 credits a month and pay per 1,000 on a volume ladder.
-   ·Optional top-ups on paid plans: set a monthly budget and, when the allowance runs out, 5,000 credits are charged at the plan's own rate instead of a 402.
-   ·The 402 body now carries credits\_used, credits\_included and an upgrade\_url.

## Slack app

-   ·Search jobs and scan tech stacks from Slack with /jobspipe, @JobsPipe mentions and direct messages. Follow-ups in a thread refine the search.
-   ·Each person links their own JobsPipe account, so searches draw on their own credits and nothing is shared across the workspace.

## Workflows and CSV export

-   ·Workflows: set up a Signal from a template gallery or by describing what to watch in chat. An optional plain-language intent lets AI drop matches that don't fit before anything is sent.
-   ·Export CSV on dashboard search results downloads up to 500 rows of the current search, billed per row like any unmasked search.

## Hiring-signal fields and filters

-   ·Jobs now carry visa\_sponsorship, benefits, applicant\_count, recruiter\_emails, ghost\_score, metro\_code, esco\_skills, expires\_at and estimated salary benchmarks.
-   ·New filters: max\_ghost\_score, visa\_sponsorship\_or, benefits\_or, max\_applicant\_count, has\_recruiter\_email, metro\_code\_or, esco\_skill\_id\_or and min\_salary\_usd.
-   ·include\_unknown\_size keeps companies of unknown size in employee-count filters.

## Filter by US state and Canadian province

-   ·New region\_or filter takes ISO 3166-2 codes, e.g. \["US-NY","CA-ON"\], and matches every spelling a job board publishes.

## Browse free, reveal what you need

-   ·The dashboard's job search shows results in preview by default, at no cost, and charges one credit when you reveal a job.
-   ·The API is unchanged.

## More fields on every job, and source\_not

-   ·Search now also returns work\_arrangement, is\_manager, job\_function, last\_seen\_at, verified\_at and sources. Nothing was renamed or removed.
-   ·New work\_arrangement\_or and source\_not filters.

## Signals

-   ·Save a search and get told when new postings match: by email, or on paid plans by Slack or a signed alert.matched webhook.
-   ·Watch every new matching job or only companies that start hiring, as a daily digest or as soon as they appear.
-   ·New discovered\_at\_gte filter selects postings by when JobsPipe first saw them.

## The meter now counts jobs, and previews are free

-   ·Per-job metering is live in the API, not just in the pricing table. A response carrying twenty-five postings now costs twenty-five credits.
-   ·A search that matches nothing costs nothing. No rows, no charge.
-   ·New blur\_company\_data flag: employer name, domain, links and description come back masked while titles, locations, salary and total\_results stay readable, and the call consumes no credits. Size a search before you pay for it.
-   ·Endpoints that do not return jobs (tech-stack scan, insights, companies) still cost 1 credit per call.

## MCP sign-in with OAuth

-   ·Claude and ChatGPT connectors, Claude Code and other MCP clients connect with just the server URL and a JobsPipe sign-in. No key to copy.
-   ·The MCP server gains detect\_company\_tech\_stack.
-   ·Email and password sign-in joins Google, GitHub and one-time codes.

## 300,000 jobs is the self-serve ceiling

-   ·Volume is no longer a list price. Above 300,000 jobs a month we quote against your actual volume and scope, so the published ladder is Free, Builder $49 and Scale $349.
-   ·Scale stays the best published rate at $1.16 per 1,000 jobs, against $1.50 at TheirStack's top tier.
-   ·Nobody was subscribed to Volume, so no plan changed underneath a customer.

## Company lookup answers far more often

-   ·GET /v1/companies/{key} now also uses the domain an employer's own applicant tracking system publishes on its postings, so many companies that previously returned nothing return a full record.
-   ·Two independent sources still have to agree before a company is published - a wrong domain would attach the wrong employer's logo, size and description to the name you asked for.
-   ·Company lookups now show their cost in your request log. The cost itself is unchanged.

## Company lookup

-   ·GET /v1/companies/{key} returns one company's enriched record: domain, website, logo, headcount, headquarters, description and LinkedIn page.
-   ·1 credit per lookup.

## The rate per 1,000 now falls at every tier

-   ·Scale moves to $349 for 300,000 jobs and Volume to $999 for 1,000,000, so the rate runs $1.96, $1.16, $1.00 per 1,000 as volume grows.
-   ·Volume previously cost $1,200 for 1,000,000, which worked out dearer per job than Scale. Four Scale plans bought more jobs for less money, so the tier no one should have bought was the one we were selling.
-   ·Existing Builder plans are unchanged at $49 for 25,000 jobs.

## Credits are now denominated in jobs

-   ·1 credit = 1 job returned, replacing 1 credit = 1 API request. A response carrying twenty-five postings costs twenty-five credits.
-   ·Free is 1,000 jobs/month, Builder $49 for 25,000 and Scale $349 for 300,000, which works out at $1.16 per 1,000 on Scale.
-   ·Every jobs API in this market bills per job, so the change makes our rate directly comparable to theirs rather than requiring arithmetic.

## Labour Market Insights, occupations and skills

-   ·Every posting is classified into an ISCO-08 occupation and its employer into an ISIC Rev.4 industry, and tagged with skills. Filter with occupation\_code\_or, isic\_division\_or and skills\_or.
-   ·Ten /v1/insights endpoints answer aggregate questions from live postings: occupations and industries by volume, top and trending skills, compensation percentiles, salary benchmarks and AI exposure.
-   ·The dashboard has a matching Insights tab.

## Webhooks

-   ·Paid plans can subscribe an https endpoint to job.closed and receive a signed HMAC-SHA256 event when a tracked posting closes, with retries.
-   ·Search gained a status filter (active, closed or any) and closure metadata on each job.

## Credit-based plans

-   ·All plans are now metered in credits: 1 API request = 1 credit.
-   ·Free tier includes 100 credits/month, Builder 100,000, Scale 1M. Balances reset each billing cycle.
-   ·Live LinkedIn searches from the dashboard cost 5 credits per run.

## Tech-stack scanner

-   ·Vendored the tech-stack scanner and exposed it through the API, wired to the /stack pages.
-   ·POST /v1/stack/scan documented as a public API-key endpoint.
-   ·Scan results are cached, so repeat scans of the same site return quickly.

## MCP server

-   ·Added the JobsPipe MCP server so agent clients can call the API as native tools.
-   ·Authenticates with the same API key as REST, so quota and rate limits apply to your account.
-   ·Connects over streamable HTTP with nothing to run locally.

## Typed jobs schema

-   ·Job search now uses a typed jobs schema and returns active postings only.
-   ·Y Combinator added as a source, with full posting lifecycle tracking.
-   ·OpenAPI 3.1 spec published at /openapi.yaml.


---
Try it with no key: `curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search`. AI agents: the full machine-readable index of this site is https://jobspipe.dev/llms.txt?src=md-twin - API quickstart, MCP server, pricing. Free key (1,000 jobs to start): https://jobspipe.dev/signup