Skip to main content
Glama

Fairquery Agent Trust & Data Safety

Company search (offline here; indexed search is live elsewhere)

jobs_search_companies
Read-onlyIdempotent

Indexed Jobs search is LIVE (paid, on your own Apify token): one call searches 8,800+ Greenhouse, Ashby and Lever company boards, with radius and salary filters, from a fresh daily index (not a live scrape of a few boards). Run it as the Apify Actor https://apify.com/fairquery/jobs-index-search or the MCP https://mcp.getfairquery.com/jobs-index/mcp (send your Apify token). New Apify accounts get a $5 starter credit. This free tool stays free and live-scans the 135-board starter list. WHAT: Offline on this free server. Paid indexed Jobs search is live elsewhere: the Apify Actor https://apify.com/fairquery/jobs-index-search or the MCP https://mcp.getfairquery.com/jobs-index/mcp, on your own Apify token. One call searches 8,800+ Greenhouse, Ashby and Lever boards with radius and salary filters from a fresh daily index. This tool does not run any Actor. WHEN: Do not call this for jobs. For many companies, radius or salary filters, point the user to the Actor or MCP above (Apify token from https://console.apify.com/settings/integrations; new accounts get a $5 starter credit). For free jobs by place or role, call jobs_search_by_location (135 starter boards, no token). WHEN NOT: Any live lookup. One board (jobs_get_board). A place or role on the starter list (jobs_search_by_location — call that; do not ask for a company). One job's full detail (jobs_get_job), or one open/closed re-check (jobs_check_open). BEHAVIOR: Returns COMING_SOON immediately on this Fairquery-hosted Worker. Does not read an Apify token from the request, does not call Apify, and does not start an Actor run, whether or not a token is sent. Arguments are ignored. Nothing is billed. Free tools keep working with no token. COST: Not billed. No Actor run. Indexed search bills the caller's own Apify account on the Actor or MCP above, never through this free server. RETURNS: Tool error COMING_SOON (retryable false, kept as the error code) and no job rows. The message says indexed search is live, links the Actor and MCP, and suggests jobs_search_by_location for free. PARAMETERS: Accepted and ignored while this tool is offline. companies, boards, useSeedList, filters, onlyNew, stateStoreName, confirmOpen, includeDescription and maxJobs do not start a run. An empty call also returns COMING_SOON (not INPUT_EMPTY). EXAMPLE: {"companies":["stripe.com"]} -> COMING_SOON with links to indexed search, not billed. Free: {"locations":["Tampa"],"descriptionIncludes":["engineer"]} on jobs_search_by_location.

Input Schema

NameRequiredDescriptionDefault
limitNoOptional page size, integer 1-500, default 50
boardsNoOptional. 0-500 exact boards. Example: [{"ats":"lever","slug":"palantir"}]
offsetNoOptional items to skip, integer >= 0, default 0; pass nextOffset from the previous response
remoteNoOptional, "any" | "only" | "exclude", default "any" (no remote filter). "only" keeps job rows with remote = true (an ATS remote flag, or remote wording such as "Remote" or "Anywhere" in the location or title; see remote_basis); "exclude" drops those rows and keeps rows where remote is false or unknown (null)
maxJobsNoIgnored while this tool is temporarily offline (not billed). Previously a cap on job rows (integer 1-50000, default 5000).
onlyNewNoOptional boolean, default false: only new/changed jobs since the last tracked run (plus free closed rows)
companiesNoOptional (see PARAMETERS). 0-200 names, domains or board URLs. Example: ["stripe.com","Ramp","https://jobs.lever.co/palantir"]
countriesNoOptional ISO-2 codes, any-of. Example: ["US","GB"]
locationsNoOptional, 0-50 strings, any-of. Location substring match. US state names and codes match both ways; NYC, SF, LA, DC and Tampa Bay metro aliases match. Example: ["london"]
confirmOpenNoIgnored while this tool is temporarily offline (not billed). Previously re-checked each emitted job on its detail endpoint.
departmentsNoOptional, 0-50 strings, any-of. Department/team substring match. Example: ["engineering"]
useSeedListNoIgnored while this tool is temporarily offline (not billed). Previously: also scan the verified starter boards.
excludeStaleNoOptional boolean, default false. true drops job rows with long_open = true (age_days > 60, counted from posted_at, or from first_seen_at when the ATS gives no date) or reposted = true (a new job id matching a job that closed on the same board within 90 days, from the history in stateStoreName, so never on a board's first tracked run). Free closed rows are not filtered by it
titleExcludesNoOptional, 0-50 strings, any-of. Whole-word title exclusion. Example: ["intern"]
titleIncludesNoOptional, 0-50 strings, any-of. Whole-word title match. Example: ["engineer"]
stateStoreNameNoOptional, default "fairquery-jobs-feed-state": named key-value store for history in your Apify account
postedWithinDaysNoOptional integer 1-3650, default off: keep only job rows whose ATS publish date (posted_at) is at most this many whole days old; rows without an ATS publish date (posted_at = null) are dropped. Free closed rows are not filtered by it. Example: 7
includeDescriptionNoOptional boolean, default false: add plain-text descriptions (PII-scrubbed)

Output Schema

NameRequiredDescriptionDefault
metaNoTool-specific context: board totals, request counts, cost notes
countYesNumber of items in this page
itemsYesResult rows. Each has "type": "job" (job_key, title, company, locations, countries, remote, posted_at, verified_open_at, age_days, long_open, apply_url, source_url, ...), "board", "company", "seed_board", "open_check" or "error" (code, message, retryable)
totalYesTotal items after filters, before paging
offsetYesOffset of the first item in this page
hasMoreYesTrue if more items exist after this page
nextOffsetYesOffset to pass for the next page, or null when done

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / confirmOpen / description
      Previous value: -"Optional boolean, default false: re-check each emitted job on its detail endpoint ($0.29 per 1,000 re-checks, max 200 per run)"New value: +"Ignored while this tool is temporarily offline (not billed). Previously re-checked each emitted job on its detail endpoint."
    • changedInput schema / properties / maxJobs / description
      Previous value: -"Optional integer 1-50000, default 5000: spend cap on billed job rows"New value: +"Ignored while this tool is temporarily offline (not billed). Previously a cap on job rows (integer 1-50000, default 5000)."
    • changedInput schema / properties / useSeedList / description
      Previous value: -"Optional boolean, default false: also scan all verified starter boards (each billed as a board)"New value: +"Ignored while this tool is temporarily offline (not billed). Previously: also scan the verified starter boards."
  2. Changed4 schema fields changed
    • changedInput schema / properties / boards / items / properties / ats / description
      Previous value: -"Required. The applicant-tracking system hosting the board: \"greenhouse\" | \"lever\" | \"ashby\" | \"personio\". Personio is the company account you name, not a discovered board. Example: \"ashby\""New value: +"Required. The applicant-tracking system hosting the board: \"greenhouse\" | \"lever\" | \"ashby\" | \"personio\" | \"pinpoint\" | \"gem\". Personio, Pinpoint and Gem are the account, subdomain or vanity you name, not a discovered board. Example: \"ashby\""
    • changedInput schema / properties / boards / items / properties / ats / enum
      Previous value: -[
      -  "greenhouse",
      -  "lever",
      -  "ashby",
      -  "personio"
      -]New value: +[
      +  "greenhouse",
      +  "lever",
      +  "ashby",
      +  "personio",
      +  "pinpoint",
      +  "gem"
      +]
    • changedInput schema / properties / boards / items / properties / slug / description
      Previous value: -"Required. Board slug as it appears in the public board URL (case-insensitive): boards.greenhouse.io/{slug}, jobs.lever.co/{slug}, jobs.ashbyhq.com/{slug}, or the Personio account in {account}.jobs.personio.de (letters, digits, hyphens; a dot is rejected). 1-100 chars. Example: \"ramp\" or \"acme\""New value: +"Required. Board slug as it appears in the public board URL (case-insensitive): boards.greenhouse.io/{slug}, jobs.lever.co/{slug}, jobs.ashbyhq.com/{slug}, the Personio account in {account}.jobs.personio.de, the Pinpoint subdomain in {subdomain}.pinpointhq.com, or the Gem vanity in jobs.gem.com/{vanity}. Named feeds reject a dot. 1-100 chars. Example: \"ramp\" or \"acme\""
    • changedInput schema / properties / locations / description
      Previous value: -"Optional, 0-50 strings, any-of. Location substring match. Example: [\"london\"]"New value: +"Optional, 0-50 strings, any-of. Location substring match. US state names and codes match both ways; NYC, SF, LA, DC and Tampa Bay metro aliases match. Example: [\"london\"]"
  3. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/idempotent/openWorld=false; the description goes far beyond by disclosing that the tool returns a COMING_SOON tool error with retryable=false, ignores all arguments whether or not a token is sent, never starts an Actor run, and bills nothing. That is exactly the behavioral context an agent needs before choosing to call a deliberately non-functional stub, and nothing conflicts with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The WHAT/WHEN/WHEN NOT/BEHAVIOR/COST/RETURNS/PARAMETERS labels make it scannable and front-loaded, but the same pitch is restated three times: the Actor URL and '8,800+ boards with radius and salary filters' appear in the opening paragraph, in WHAT, and again in WHEN. For a stub that returns one error, the promotion of the paid service crowds out the operational facts.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that performs no work, everything an agent could need is present: the exact return value (COMING_SOON, retryable false), zero-cost confirmation, ignored arguments, the fallback chain, and worked request/response examples. With an output schema present and 18 fully documented parameters, no gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the PARAMETERS section adds a fact the individual schema descriptions only carry piecemeal: every argument (companies, boards, filters, onlyNew, stateStoreName, confirmOpen, includeDescription, maxJobs) is accepted and ignored while offline, and an empty call returns COMING_SOON rather than INPUT_EMPTY. It doesn't add per-parameter semantics beyond that, which keeps it at 4 rather than 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (company search over ATS boards) and immediately qualifies it as offline on this server, then names the live equivalents (the Apify Actor and the hosted MCP). Combined with the title, an agent knows within one line that this call returns COMING_SOON and where the real search lives, which also cleanly separates it from jobs_search_by_location and jobs_get_board.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN, WHEN NOT, and sibling routing are all present: 'Do not call this for jobs', 'use the Actor or MCP above', 'For free jobs by place or role, call jobs_search_by_location', plus per-sibling exclusions for jobs_get_board, jobs_get_job and jobs_check_open. The preconditions (own Apify token, $5 starter credit) are spelled out rather than inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources