Overview
Company career boards each publish jobs in their own format, with their own names for the same things. Job Postings maps every board to one schema, so the same code works for any company it covers. Pass the company name, such as airbnb or ramp, or a link to the company's careers board, and get its open roles newest first. Up to 2,000 open jobs are returned per company, paged, and filters for keyword, location, department and remote work run before paging.
Live Test Job Postings Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as JobPostings. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "JobPostings",
"arguments": {
"company": "airbnb"
}
}You do not name the tool yourself; the model picks it. Asking about airbnb in the terms this skill covers is enough for it to reach for JobPostings on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
companyRequired | string | The company's career board name, usually the company name in lowercase, for example airbnb, stripe or palantir. Required unless url is given. length 0–100 |
keywordOptional | string | Return only jobs whose title, department or team contains every word given, for example engineer or product designer. length 0–100 |
locationOptional | string | Return only jobs with a location containing this text, for example London, New York or Germany. length 0–100 |
remoteOptional | boolean | true returns only jobs open to remote work; false only jobs that are not. |
departmentOptional | string | Return only jobs whose department or team contains this text, for example Engineering or Sales. length 0–100 |
employmentTypeOptional | string | Return only jobs of this employment type. Jobs whose board gives no employment type are kept, since many boards leave it blank; only jobs of another type are left out.full-timepart-timecontractinternshiptemporary |
postedSinceOptional | string | Return only jobs first published at or after this date or date-time (ISO 8601, for example 2026-10-01), or within this age: a number followed by h, d or w, for example 12h, 7d or 2w. Jobs with no posting date are left out when this is set. length 0–30 |
minSalaryOptionalPremium | number | Return only jobs whose salary range reaches at least this amount, in the job's own currency and pay period: the top of the range is compared, or the bottom when no top is given. Jobs that publish no salary are left out when this is set. range 0–∞ |
pageOptional | integer | Page of results to return: 10 jobs per page on the free plan, 50 on paid plans. default 1 · range 1–200 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"company": "Airbnb",
"boardTotal": 174,
"truncated": false,
"total": 174,
"page": 1,
"pages": 4,
"count": 2,
"jobs": [
{
"id": "8299386",
"title": "Office Manager, China",
"department": "People",
"team": null,
"location": "Beijing, China",
"locations": [
"Beijing, China"
],
"remote": false,
"workplaceType": "onsite",
"employmentType": null,
"experienceLevel": null,
"postedAt": "2026-10-19T01:34:11.000Z",
"updatedAt": "2026-10-19T01:34:11.000Z",
"url": "https://careers.airbnb.com/positions/8299386?gh_jid=8299386",
"applyUrl": "https://careers.airbnb.com/positions/8299386?gh_jid=8299386",
"summary": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has since grown to over 5 million hosts who have welcomed over 2 billion guest arrivals in almost every country across the globe. Every day, hosts offer unique stays and experiences…",
"description": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has since grown to over 5 million hosts who have welcomed over 2 billion guest arrivals in almost every country across the globe. Every day, hosts offer unique stays and experiences that make it possible for guests to connect with communities in a more authentic way.\n\nYour Location:\n\nThis position needs to be based in the Beijing, China office 5 days a week. No Visa/Relocation Support.\n\nThe Community you will join:\n\nThe Office Manager plays a critical role in delivering a seamless and welcoming office experience by coordinating daily office operations, supporting local leaders and employees, and…",
"salary": {
"min": null,
"max": null,
"currency": null,
"interval": null,
"summary": null
}
},
{
"id": "8299396",
"title": "Head of Homes Supply, Thailand & Vietnam",
"department": "Sales",
"team": null,
"location": "Bangkok, Thailand",
"locations": [
"Bangkok, Thailand",
"Bangkok, Bangkok Metropolis, Thailand"
],
"remote": true,
"workplaceType": "remote",
"employmentType": null,
"experienceLevel": null,
"postedAt": "2026-10-18T08:55:16.000Z",
"updatedAt": "2026-10-18T08:55:16.000Z",
"url": "https://careers.airbnb.com/positions/8299396?gh_jid=8299396",
"applyUrl": "https://careers.airbnb.com/positions/8299396?gh_jid=8299396",
"summary": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has since grown to over 5 million hosts who have welcomed over 2 billion guest arrivals in almost every country across the globe. Every day, hosts offer unique stays and experiences…",
"description": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has since grown to over 5 million hosts who have welcomed over 2 billion guest arrivals in almost every country across the globe. Every day, hosts offer unique stays and experiences that make it possible for guests to connect with communities in a more authentic way.\n\nThe Community You Will Join\n\nThe Homes team grows Airbnb's destination business. We manage a competitive portfolio of accommodations that meets guest expectations for value, variety, and quality. We help all types of hosts grow their business through new products, partnerships, best practices, and innovation.\n\nThe Difference You Will…",
"salary": {
"min": null,
"max": null,
"currency": null,
"interval": null,
"summary": null
}
}
]
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
company | string | Airbnb | Company name as its career board gives it; null when the board does not name the company |
boardTotal | number | 174 | Number of open jobs on the board |
truncated | boolean | false | true when the company has more open jobs than are returned across all pages |
total | number | 174 | Number of jobs matching the filters |
page | number | 1 | Page of results returned |
pages | number | 4 | Number of pages of matching jobs |
count | number | 2 | Number of jobs returned on this page |
jobs | array[2] | Jobs on this page, newest first | |
jobs.0.id | string | 8299386 | The job's id on the company's career board |
jobs.0.title | string | Office Manager, China | Job title |
jobs.0.department | string | People | Department the job is in; null when the board gives none |
jobs.0.team | object | null | Team or job function; null when the board gives none |
jobs.0.location | string | Beijing, China | Primary location of the job |
jobs.0.locations | array | ["Beijing, China"] | Every location the job is offered in, primary first |
jobs.0.remote | boolean | false | true when the job is open to remote work |
jobs.0.workplaceType | string | onsite | remote, hybrid or onsite; null when the board does not say |
jobs.0.employmentType | object | null | full-time, part-time, contract, internship, temporary or volunteer; null when the board does not say |
jobs.0.experienceLevel | object | null | Seniority the job is posted at, as the board words it; null when the board does not say |
jobs.0.postedAt | string | 2026-10-19T01:34:11.000Z | When the job was first published (ISO 8601) |
jobs.0.updatedAt | string | 2026-10-19T01:34:11.000Z | When the job was last updated (ISO 8601); null when the board does not publish it |
jobs.0.url | string | https://careers.airbnb.com/positions/8299386?gh_jid=8299386 | URL of the job's posting page |
jobs.0.applyUrl | string | https://careers.airbnb.com/positions/8299386?gh_jid=8299386 | URL to apply for the job |
jobs.0.summary | string | Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has si… | Opening of the job description, up to 280 characters; null when the board lists no description |
jobs.0.descriptionPremium | string | Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has si… | Full job description as plain text; null when the board lists no description |
jobs.0.salary | object | {…} | Salary range as the company publishes it; every value is null when it publishes none |
jobs.0.salary.minPremium | object | null | Lower end of the salary range |
jobs.0.salary.maxPremium | object | null | Upper end of the salary range |
jobs.0.salary.currencyPremium | object | null | ISO 4217 currency of the salary range |
jobs.0.salary.intervalPremium | object | null | Period the salary is paid per: year, month, week, day or hour |
jobs.0.salary.summaryPremium | object | null | The salary range as the company words it, for example $211.4K - $290.6K |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 10 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Job Aggregators
- Job boards and niche job sites pull the open roles at the companies they track, in one schema whatever career board each company uses.
- Hiring Signals
- Sales and investment tools watch which companies are hiring, for which teams and where, as a growth signal.
- Career Pages
- Agencies and site builders show a client's live openings on their own pages without integrating each careers system separately.
- Job Alerts
- Alert services check a list of companies for new roles matching a keyword, location or remote preference.
Other ways to use Job Postings
Set up Job Postings on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in data: