Build on Employbl data
Connect ChatGPT, Claude, Cursor or any MCP client to Employbl's 30,000+ companies, 100,000+ jobs, and 75,000+ funding rounds. Two or three steps per client, no token to paste.
Connect Employbl to your assistant
Employbl is a remote MCP server at https://www.employbl.com/api/mcp. Every client below connects the same way: add the URL, sign in to Employbl when the client asks, click Authorize. No token to paste. Any verified account works, and every call is free.
Pick your client. Each one is two or three steps.
ChatGPT
chatgpt.com → Settings → Connectors
- Open Settings → Connectors → Advanced, and turn on Developer mode.
- Choose Create. Name it Employbl, set the MCP server URL to https://www.employbl.com/api/chatgpt/mcp, and pick OAuth for authentication.
- Start a new chat, open the + menu, pick Employbl, and sign in to Employbl when ChatGPT asks.
ChatGPT gets a curated surface — company and job search, funding rounds, company profiles that render as a card in the conversation — rather than the full 27 tools. Adding it by hand needs Developer mode, which ChatGPT offers on its paid plans; the directory listing removes that step once it is live.
Claude (claude.ai and Desktop)
Settings → Connectors → Add custom connector
- In claude.ai or Claude Desktop, open Settings → Connectors.
- Choose Add custom connector. Name it Employbl and paste https://www.employbl.com/api/mcp.
- Click Connect, sign in to Employbl in the window that opens, and click Authorize.
One connection covers claude.ai, Claude Desktop and the Claude mobile apps on the same account.
Claude Code
The terminal
- Run the command below once.
- Inside a session, type /mcp and pick Employbl to sign in. A browser window opens; click Authorize.
claude mcp add --transport http employbl https://www.employbl.com/api/mcp
Cursor
Cursor → Settings → MCP
- Click Add to Cursor. Cursor opens with the server pre-filled; confirm Install.
- Click the sign-in prompt next to Employbl in Settings → MCP and authorize in the browser.
~/.cursor/mcp.json (or .cursor/mcp.json in a project)
{
"mcpServers": {
"employbl": {
"url": "https://www.employbl.com/api/mcp"
}
}
}VS Code (Copilot agent mode)
The MCP: Add Server command, or .vscode/mcp.json
- Click Add to VS Code and confirm the server. Or run MCP: Add Server from the command palette and paste the URL.
- Start the server from the MCP panel; VS Code opens a browser to sign in.
.vscode/mcp.json
{
"servers": {
"employbl": {
"type": "http",
"url": "https://www.employbl.com/api/mcp"
}
}
}Codex CLI
~/.codex/config.toml
- Add the block below to ~/.codex/config.toml.
- Restart Codex. On first use it opens a browser to sign in to Employbl.
~/.codex/config.toml
[mcp_servers.employbl] url = "https://www.employbl.com/api/mcp"
Gemini CLI
~/.gemini/settings.json
- Add the block below to ~/.gemini/settings.json.
- Run /mcp auth employbl inside Gemini CLI to sign in.
~/.gemini/settings.json
{
"mcpServers": {
"employbl": {
"httpUrl": "https://www.employbl.com/api/mcp"
}
}
}Windsurf
Windsurf → Settings → MCP
- Add the block below to ~/.codeium/windsurf/mcp_config.json (Settings → MCP → Manage opens it).
- Refresh the MCP list and authorize Employbl when prompted.
~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"employbl": {
"serverUrl": "https://www.employbl.com/api/mcp"
}
}
}Any other MCP client
Wherever your client keeps its server list
- Add a streamable-HTTP server named employbl at https://www.employbl.com/api/mcp.
- If the client supports OAuth, sign in when it asks. If it does not, create an access token at Profile → MCP and send it as a Bearer header.
Generic JSON shape
{
"mcpServers": {
"employbl": {
"url": "https://www.employbl.com/api/mcp",
"headers": {
"Authorization": "Bearer {your-mcp-key}"
}
}
}
}Or use an access token
For clients without an OAuth flow, generate a permanent access token at Profile → MCP and send it as a Bearer header. The token authenticates every MCP and REST request and is rate-limited per token.
{
"mcpServers": {
"employbl": {
"url": "https://www.employbl.com/api/mcp",
"headers": {
"Authorization": "Bearer {your-mcp-key}"
}
}
}
}What to ask first
Once connected, your assistant can call the tools in Section II on your behalf. Three prompts that use the data well:
- “Find Series A to C companies in San Francisco hiring senior backend engineers who use Go.”
- “Which companies raised in the last 30 days and have open product roles?”
- “Update my Employbl preferences: remote, staff level, fintech or developer tools.”
Available tools (29)
All tools are premium-gated and rate-limited. Use natural language with Claude to invoke them — you don't need to memorize the exact names or parameters.
Company Search & Discovery
find_companies
Search Employbl's index of 30,000+ American companies. Filter by name, city, zip, state, distance from any US location, job-feed coverage, funding round, sector/subsector (curated industry taxonomy), tech stack, investors, and company size. Location filters combine freely with every other filter, and they match satellite offices as well as headquarters. Tech-stack filtering matches technologies extracted from each company's live job descriptions (2,400+ companies) in addition to company-reported stacks.
› "Which Series A companies are in zip code 94133?"
get_company
Fetch a single company's full profile by slug. Returns description, address, employee range, full funding history, social links, open role count, and premium fields like tagline, tech stack, and FAQ. A company's own story (product, customers, case studies, FAQ) is included while the company holds Company Premium; otherwise the result says it is withheld and where to read it.
› "Get the full profile for Octave"
find_companies_near_me
Find the tech companies nearest to any US location, sorted by distance. Give a street address, city + state, or zip code — matched against 29,000+ geocoded company offices. Returns distance in miles, open role count, and profile links. Optional radius, funding-round, company-size and synced-listings-only filters. Use find_companies instead when distance ordering doesn't matter.
› "Which Series A startups within 10 miles of Oakland have open roles on Employbl?"
find_similar_companies
Look up a company by name or domain and discover curated similar companies. Useful for competitive analysis, exploring a market segment, or finding alternative employers.
› "Show me companies similar to Stripe"
compare_companies
Compare 2-5 companies side-by-side: what they do, HQ, founded year, size, total raised, latest round, open roles, work model, tech stack, and notable investors — as one table.
› "Compare Anthropic, OpenAI, and Mistral as employers"
summarize_company
Generate a concise, AI-powered narrative summary of a company. Covers what they do, stage, investors, and why an engineer might want to work there. Uses your monthly AI token allowance or BYOK key.
› "Summarize OpenAI for me"
Job Search
search_jobs
Search Employbl's index of 100,000+ active job listings. Filter by title, country, city, remote status, seniority, department (engineering, sales, data-ml, …), salary, posting recency, company stage, company size, sector (curated industry taxonomy), tech stack, investors, and job tags. A search that matches nothing says which filter value was responsible.
› "Find remote senior engineering jobs at AI companies paying $180k+"
get_job_listing
Fetch a single job listing's full details by id, including the complete job description (truncated to ~4K chars).
› "Get full details for job listing 12345"
Funding & Market Intelligence
recent_funding_rounds
List recent venture funding rounds across 30,000+ companies and 75,000+ rounds. Filter by date range, round name, minimum USD amount, location, and job-feed coverage. Defaults to the last 90 days. A company with no synced roles may still be hiring — recently funded companies are the least likely to be covered. Every response states the date funding data is current through.
› "Show me companies in NYC that raised Series B in the last 6 months"
AI-Powered Search
personalize_search
Interprets natural-language job search requests and recommends the most relevant search parameters. Optionally factors in work model, seniority, and location preferences. Uses your AI token allowance or BYOK key.
› "I want to find startup jobs in climate tech where I can work remotely"
Profile Management
These tools write your own data — your profile, preferences, ratings and saved searches — so the assistant can tune what it returns for you.
get_profile
Fetch your complete profile including basic info, work experience, education, projects, certifications, and skills. Optionally specify which sections to retrieve.
› "Show me my work experience and skills"
update_profile
Update your basic profile information including name, job title, location, summary, LinkedIn, GitHub, personal website, and avatar.
› "Update my profile: I'm now a Staff Engineer at Anthropic in San Francisco"
add_work_experience
Add a work experience entry to your profile with title, company, dates, and description.
› "Add my last job: Senior Engineer at Google from Jan 2020 to Dec 2023"
update_work_experience
Edit one work experience entry by id — close out a role that has ended, fix a title or dates, rewrite the description. Partial: send only what changes. get_profile shows each entry's id.
› "My Apple contract ended in September — close it out on my profile"
delete_work_experience
Remove one work experience entry from your profile by id. Permanent; the assistant should confirm first.
› "Remove the Mondo recruiting job from my profile"
add_skills
Add or update your technical skills. This replaces your existing skills list with the provided skills.
› "Add my skills: Python, TypeScript, PostgreSQL, AWS, Docker, Kubernetes"
upload_profile_from_text
Build your entire profile from pasted text in one step. Paste a resume, LinkedIn About section, or bio — AI extracts your basic info, work history, and skills and writes them to your profile, then reports what's still missing. Uses your AI token allowance or BYOK key.
› "Here is my resume [paste] — set up my Employbl profile from it"
Job Search Preferences
Free, like everything else on the server since v0.18.0 — tuning your preferences costs nothing.
get_preferences
Retrieve your job search preferences including target seniority, industries, company stages, locations, skills, and minimum compensation.
› "Show me my current job search preferences"
update_preferences
Update your job search preferences. Merges with existing preferences (partial update). Supports role/function (engineering, product, design, …), seniority levels, company stages, industries, locations (any city worldwide, or "remote"), skills, and minimum compensation.
› "Set my preferences: engineering, Series A-B AI companies, senior roles, remote or SF, $180k+"
Saved Searches & Alerts
Free — saving a search and the alert emails it sends both cost nothing.
save_search
Save a job search and get a daily or weekly email when new matching jobs are posted. Filter by title, city/state, remote, company size, funding stage, and investors.
› "Watch for staff-level AI infra roles in SF and email me weekly"
list_saved_searches
List your saved searches with their filters, alert frequency, and when the last alert email went out.
› "What job alerts do I have set up?"
delete_saved_search
Delete a saved search by id and stop its email alerts.
› "Delete my old remote-fintech alert"
For Company Representatives
Free claim (sign in with your work Google account) unlocks the two profile tools below — no candidate subscription needed (and every account may call the whole server, free, at 60 requests a minute and 5,000 a day). Company Premium (annual, progressive pricing — see /pricing) unlocks unlimited use of the full Employbl toolkit — every company, job, and funding intelligence tool on this page — for up to 10 teammates; teammates get a seat automatically by claiming with their work Google account. Objective data (funding, investors, headcount, verified roles) is maintained by Employbl and can never be company-edited.
get_my_company
Fetch your claimed company's profile status: last-30-day candidate view counts, profile completeness by section, published/draft state, and synced open roles.
› "How is our Employbl company profile doing?"
update_company_profile
Update your company's profile — tagline, product description, highlights, candidate FAQ, work model, hiring focus, tech stack, notable customers, perks, culture, careers page URL, the story fields (one-liner, why join now, team snapshot, interview process) and the structured blocks (`products`, `case_studies`, `faq`, `press_links`) — plus headcount and founding year, which candidates then see labeled company-reported. Partial updates; changes go live on save. Photos are uploaded from the web editor.
› "Update our Employbl profile: we're hiring for ML infra and our stack is Rust + Kubernetes"
Personalized Recommendations
Reading recommendations and teaching the feed are both free — the 100-call allowance was removed in v0.18.0, and the only ceiling now is the per-token rate limit (60/min, 5,000/day).
get_recommended_jobs
Get personalized job recommendations based on your profile and preferences. Returns jobs matching your target seniority, industries, company stages, locations, and minimum compensation. Optionally includes reasoning for each match.
› "Show me 10 recommended jobs with explanations"
get_recommended_companies
Get personalized company recommendations based on your preferences. Returns companies matching your preferred industries, stages, and locations, sorted by hiring activity. Optionally includes reasoning. Open-role counts reflect Employbl's synced coverage, not whether a company is hiring.
› "What companies match my preferences?"
rate_job
Give feedback on a recommended job so recommendations improve. Thumbs up ranks similar jobs higher; thumbs down hides it and downranks similar roles. Optional free-text reason plus a structured `reason_category` (location, not_remote, role, seniority, compensation, not_interested for down; role_fit, company, location_fit, compensation_fit for up).
› "Thumbs down that job — too senior for me"
dismiss_job
Hide a single job from your recommendations everywhere (web feed and MCP). Optionally include a reason and `reason_category` so future recommendations learn why.
› "Hide that last job from my recommendations"
hide_jobs_matching
Hide a whole class of jobs by rule — a location, a title keyword, or anything not remote. Rules persist across the web feed and MCP.
› "Stop showing me jobs in India"
Ask in plain English
“Find Series B AI companies in San Francisco with open senior engineering roles”
“Show me my profile and recommend 5 jobs that match my preferences”
“What companies raised funding recently, and which have open roles on Employbl?”
“Find companies similar to Stripe and summarize the top 3”
“Update my profile with my new job title and add my skills”
“Here's my resume [paste or attach] — build out my Employbl profile from it”
“Which Series A companies are in zip code 94133?”
“Find startups within 10 miles of me that just raised, and show their open roles”
“Compare Anthropic, OpenAI, and Mistral as employers”
“Watch for staff-level AI infra roles in SF and email me weekly”
The same data over plain HTTP
Every read endpoint below is served from the same indexes as the MCP tools — use it from scripts, notebooks, or any HTTP client. Base URL: https://www.employbl.com/api/v1. Machine-readable spec: OpenAPI 3.1.
Authentication: the same Bearer token as the MCP server, generated at Profile → MCP. Any verified account may call every endpoint. Rate limits (60/min, 5,000/day) are shared with MCP tool calls on the same token; every response carries X-RateLimit-Remaining-Minute and X-RateLimit-Remaining-Day headers.
Responses use a { data, meta } envelope; errors use { error: { code, message } }. Add format=csv to any list endpoint for the same rows as a spreadsheet-ready CSV, with pagination in X-Total-Count / X-Page / X-Limit headers.
Example response — GET /companies
{
"data": [
{
"name": "Anthropic",
"slug": "anthropic",
"city": "San Francisco",
"state": "CA",
"latest_round": { "name": "Series F", "date": "2026-03-04", "amount": 3500000000, "currency": "USD" },
"job_listing_count": 214,
"hiring": true,
"profile_url": "https://employbl.com/companies/anthropic"
}
],
"meta": { "total": 1287, "count": 1, "page": 1, "limit": 1 }
}GET/companies
Search 30,000+ American tech companies. Same index as the find_companies MCP tool.
| Param | Type | Description |
|---|---|---|
| query | string | Free-text company name search. |
| city | string | HQ city, exact match (case-insensitive). |
| state | string | Two-letter state code, e.g. CA. |
| zip | csv | Five-digit US zips, e.g. 94133,94111. Matches a company with an office in any of them — satellite offices count, not just the HQ. |
| near | string | Free-text US location (street address, City, ST, or a zip). Geocoded server-side, then matched by distance against every office. Combines with all other filters. |
| radius_miles | int | Search radius for near, 1-100. Defaults to 10. Ignored without near. |
| hiring | bool | true = only companies whose job listings Employbl has synced. Filters on Employbl's coverage, not on whether a company is hiring — Employbl tracks an ATS for roughly 9% of companies. |
| latest_round | csv | Funding stages, e.g. Series A,Series B. |
| sector | csv | Curated sector/subsector names (see employbl.com/industries). |
| tech_stack | csv | Technologies, matched against company-reported and job-derived stacks. |
| investors | csv | Investor names. |
| min_employees / max_employees | int | Company size bounds. |
| sort | enum | relevance (default), most_hiring, or recent_funding. |
| limit | int | Results per page, 1-50. Default 20. |
| page | int | Page number, starting at 1. |
| format | enum | json (default) or csv. CSV returns the same rows flattened for a spreadsheet — nested fields become dotted columns (company.name), lists are ;-joined — with X-Total-Count, X-Page and X-Limit headers in place of meta. A text cell that begins with =, +, - or @ is prefixed with an apostrophe so a spreadsheet reads it as text, not a formula. |
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \ "https://www.employbl.com/api/v1/companies?latest_round=Series%20A&zip=94133&limit=5"
GET/companies/{slug}
Full company profile: description, address, size, funding history, social links, and (when published) premium fields under premium_profile. The company-authored story is included only while the company holds Company Premium; otherwise story_withheld carries a note with the member and unlock URLs.
| Param | Type | Description |
|---|---|---|
| slug | path | Company slug, e.g. anthropic. |
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \ "https://www.employbl.com/api/v1/companies/anthropic"
GET/companies/{slug}/similar
Curated similar companies for a given company — useful for exploring a market segment or finding alternative employers.
| Param | Type | Description |
|---|---|---|
| slug | path | Company slug to find peers for. |
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \ "https://www.employbl.com/api/v1/companies/stripe/similar"
GET/jobs
Search 100,000+ active job listings. Same index as the search_jobs MCP tool.
| Param | Type | Description |
|---|---|---|
| query | string | Free-text title search. |
| city / state | string | The HIRING COMPANY's headquarters (state is a two-letter US code) — not where the job is. Use country or job_locations for the listing's own location. |
| country | csv | ISO 3166-1 alpha-2 codes of the listing's own location, e.g. GB,ES. Country names and alpha-3 are accepted (Spain, ESP → ES). This is how to ask for jobs in a country. |
| job_locations | csv | Exact City_State_Country keys for the listing's locations. The state segment is EMPTY wherever the row has no state, so real keys carry two underscores: London__GB, Barcelona__ES, Seattle__US. US keys usually carry the state: Austin_TX_US. |
| remote | bool | true = remote roles only. |
| level | string | Seniority: intern, junior, mid, senior, staff, principal, manager, director, executive. |
| department | csv | Function of the role: engineering, data-ml, product, design, marketing, sales, customer-success, operations, finance, people, legal, it, healthcare. Classified from the title and the employer's own department label; unclassified roles are excluded. |
| min_salary | int | Minimum listed salary in USD. |
| posted_within_days | int | Only listings updated in the last N days. |
| funding_stage | csv | Company funding stages. |
| sector | csv | Curated sector/subsector names of the hiring company (see employbl.com/industries). |
| tech_stack / investors / industry / job_tags | csv | Company and listing attribute filters. |
| sort | enum | recency (default), relevance, recent_funding, most_raised, and more. |
| limit | int | Results per page, 1-50. Default 20. |
| page | int | Page number, starting at 1. |
| format | enum | json (default) or csv. CSV returns the same rows flattened for a spreadsheet — nested fields become dotted columns (company.name), lists are ;-joined — with X-Total-Count, X-Page and X-Limit headers in place of meta. A text cell that begins with =, +, - or @ is prefixed with an apostrophe so a spreadsheet reads it as text, not a formula. |
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \ "https://www.employbl.com/api/v1/jobs?remote=true&min_salary=180000&funding_stage=Series%20B&limit=5"
GET/jobs/{id}
Single job listing with the complete job description (not truncated) and company info.
| Param | Type | Description |
|---|---|---|
| id | path | Numeric listing id from the search results. |
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \ "https://www.employbl.com/api/v1/jobs/12345"
GET/funding-rounds
Recent venture rounds across 75,000+ rounds. Defaults to the last 90 days. meta.data_current_through gives the newest round date in the dataset.
| Param | Type | Description |
|---|---|---|
| since | date | ISO date lower bound, e.g. 2026-01-01. |
| rounds | csv | Round names, e.g. Series A,Series B. |
| min_amount_usd | int | Minimum raise amount (USD rows only). |
| city / state | string | Company HQ filters. |
| hiring | bool | true = only companies whose job listings Employbl has synced. Recently funded companies are the least likely to be covered, so this hides many that are actively hiring. |
| sort | enum | recency (default) or amount. |
| limit | int | Results per page, 1-50. Default 20. |
| page | int | Page number, starting at 1. |
| format | enum | json (default) or csv. CSV returns the same rows flattened for a spreadsheet — nested fields become dotted columns (company.name), lists are ;-joined — with X-Total-Count, X-Page and X-Limit headers in place of meta. A text cell that begins with =, +, - or @ is prefixed with an apostrophe so a spreadsheet reads it as text, not a formula. |
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \ "https://www.employbl.com/api/v1/funding-rounds?rounds=Series%20B&min_amount_usd=10000000&limit=5"
Error codes
| Code | HTTP | Meaning |
|---|---|---|
| UNAUTHORIZED | 401 | Missing or invalid Bearer token. |
| VALIDATION_ERROR | 400 | A query or path parameter failed validation; message says which. |
| NOT_FOUND | 404 | No entity with that slug/id. |
| RATE_LIMITED | 429 | Token exceeded 60/min or 5,000/day. Retry-After header included. |
| INTERNAL | 500 | Unexpected server error. |
Authentication and limits
Authentication: all MCP tools and REST API endpoints require a valid Employbl access token, sent as a Authorization: Bearer <token> header. Any verified account can create one. Tokens are permanent until revoked and should be kept secure.
Cost: nothing. Every verified account gets the whole server and the whole REST API, with no call allowance and no paid tier for volume — a free account and a paying one make identical calls. The only ceiling is the rate limit below, which is the same for everyone.
Rate limiting: each token gets 60 requests per minute and 5,000 per day, shared across MCP and the REST API. REST responses include X-RateLimit-Remaining-* headers; exceeding a limit returns a clear error with retry-after guidance.
AI token usage: tools like summarize_company, personalize_search, and upload_profile_from_text consume AI tokens from your monthly allowance (or use your BYOK Anthropic key if configured). Each call uses approximately 1-6K tokens.
Questions and resources
Questions or issues? Email us at connor@employbl.com
Feature requests: we're actively expanding the MCP and REST API surface. Have an idea for a new tool or endpoint? Let us know.
Model Context Protocol: learn more about MCP at modelcontextprotocol.io
What changed
update_work_experience (partial — close out a role with end_date, reopen it with is_current, fix a title, rewrite the description) and delete_work_experience, both by the id get_profile now prints next to every entry. Until now a wrong row — a contract that had ended, a title that had changed — could be fixed only in the web editor. 29 tools on /api/mcp; the ChatGPT surface is unchanged/api/chatgpt/mcp, for the ChatGPT plugin. It carries the seven read-only dataset tools — find_companies, search_jobs, recent_funding_rounds, get_company, find_similar_companies, compare_companies, get_job_listing — plus the search / fetch pair ChatGPT's search surfaces expect, and leaves out everything that writes to your account. Tool definitions are shared with /api/mcp, not forked, so both surfaces always describe the same thing. New on it: every tool carries explicit readOnlyHint / destructiveHint / openWorldHint annotations, and get_company renders an interactive company card inside the conversation. /api/mcp is unchanged — 27 tools, same URL, same tokenssearch_jobs gains department — the function of the role (engineering, data-ml, product, design, marketing, sales, customer-success, operations, finance, people, legal, it, healthcare), classified from the title and the employer's own department label, independent of level. "Sales roles at Series B companies" was previously a title guess. REST GET /jobs accepts the same department csv, and the /jobs page gains a Department chipsearch_jobs gains country — ISO alpha-2 codes matched against the LISTING's own location, with names and alpha-3 accepted (Spain, ESP → ES) — because "jobs in Spain" was previously expressible only by enumerating exact city keys, and the keys callers guessed were wrong: non-US job_locations keys carry an EMPTY state segment (London__GB, two underscores), which the parameter description now states and the filter now corrects. A search that matches nothing names which filter value matched nothing, what the other filters alone would return, and which countries have listings — instead of "No job listings matched those filters." The query description now says it matches job title and company name only, so a place name in it is never a location filter. REST GET /jobs gains the same country parameter; 402 FREE_ALLOWANCE_EXHAUSTED and the X-Free-Calls-* headers are removedsearch_jobs level gains three people-management values — manager, director, executive — alongside the six individual-contributor rungs. Management titles were unlevelled before: nearly a quarter of listings with no level were a Manager, Director or VP. REST GET /jobs level accepts the same nine valuesget_company and REST GET /companies/{slug} say when a company's story is withheld instead of omitting it silently: one sentence naming where signed-in members read it and how the company makes it public. The story itself is still absent unless the company holds Company Premium. REST carries it as story_withheld {note, member_url, unlock_url}update_company_profile gains the story fields (one_liner, why_join_now, team_snapshot, hiring_process_summary) and structured blocks — products [{name, description, kind: product|feature|capability|integration, url}], case_studies [{customer, title, url, summary, metric_value, metric_label, quote, quote_by}], faq [{question, answer}] — and press_links items now carry an optional published_on. A malformed list is refused with the field named instead of silently dropped. Products, case studies, photos and news render on the public page while the company is on a trial or subscribed. careers_url is now advertised in the schema (the handler always accepted it)sector now works on both find_companies and search_jobs. Since v0.8.2 the parameter was declared on search_jobs (where it was silently ignored) and missing from find_companies (where the server stripped it), so the only industry filter that reached the index was the legacy Diffbot industry tag — and industry: ["AI"] matched nothing. Both parameters now list the 17 sectors and 58 subsectors, and shorthand like AI, fintech, devtools or climate in either parameter is mapped to the sector. REST GET /jobs gains the same sector query parameterupdate_company_profile gains headcount and year_founded — a claimed company may correct its own objective facts; the public page labels them company-reported, and Employbl's data pipelines never overwrite a company-asserted value afterwards. Funding rounds and the logo are edited from the web dashboardrate_job and dismiss_job accept role as a negative reason_category — the job is the wrong kind of work, not the wrong level or place. The dashboard's thumbs-down offers the same "Wrong role" chip; a program-manager listing recommended to an engineer had no honest answer among the fiveupdate_preferences accepts any city for locations. It was an enum of ten values — nine US metros plus remote — so update_preferences({ locations: ["Mumbai"] }) was a validation error and no city outside them could be set from an assistant at all. Those slugs remain valid; anything else is taken as a city label and now reaches job matching instead of being discardedrate_job, dismiss_job, hide_jobs_matching, saved searches — never count and keep working after the cap. Metered tools past the cap return an upgrade message instead of a result; REST returns 402 FREE_ALLOWANCE_EXHAUSTED with a quota body and X-Free-Calls-Remaining headers. Premium and Company Premium seats are unlimitedroles — the role/function vocabulary (engineering, data-ml, product, design, marketing, sales, operations) the onboarding question and the jobs-for-you feed now weight highest. update_preferences accepts it, get_preferences reports it, and get_recommended_jobs counts a roles-only selection as having preferences instead of answering "No preferences set yet"find_companies now takes zip and near (radius around any geocoded US location), and both match satellite offices rather than only the HQ. find_companies_near_me gained latest_round, min_employees and max_employees, so "Series A companies near me" is a single call instead of an unanswerable oneget_recommended_companies hiring_only now defaults to false (it defaulted to true, silently limiting recommendations to the ~9% with a synced feed)rate_job and dismiss_job accept a structured reason_category alongside free text; dismiss_job gains an optional reason. Fixed update_preferences silently erasing hide-rulesrate_job, dismiss_job, hide_jobs_matching): rate jobs up/down, hide a single listing, or hide whole classes of jobs by location / keyword / non-remote. Feedback steers both the web "Jobs For You" feed and get_recommended_jobs, which now excludes hidden jobs and hide-rulesrecent_funding_rounds responses now end with "Funding data current through {date}" so staleness is visible; same marker in the REST meta.data_current_through fieldupdate_company_profile gains careers_url (rep-editable careers page link, rendered on the public profile)find_companies gains a sector filter over the curated industry taxonomy (17 sectors, 58 subsectors — see employbl.com/industries); legacy industry tags deprecatingfind_companies tech-stack filtering now matches technologies extracted from live job descriptions (2,400+ companies with job-derived stacks) in addition to company-reported stacksget_my_company, update_company_profile): claim-gated, no candidate subscription required, descriptive fields onlycompare_companies (side-by-side comparison of 2-5 companies) and saved-search tools (save_search, list_saved_searches, delete_saved_search) wired to the same email-alert system as the websitefind_companies_near_me (geo search over 29,000+ geocoded company HQs) and upload_profile_from_text (build your profile from a pasted resume or bio) toolsfind_similar_companies toolget_profile, update_profile, add_work_experience, add_skills), preference tools (get_preferences, update_preferences), and personalized recommendation tools (get_recommended_jobs, get_recommended_companies)