# Search URLs for browsers and assistants

Stable HTML and Markdown job-search links, with plain-language filters and no JavaScript or API key required.

Use `https://trawle.com/jobs` for server-rendered HTML, or `https://trawle.com/jobs.md` for Markdown. Both return the same search results, applied filters, data date and ordinary next-page links. No account, API key, JavaScript or MCP connection is required.

```text
https://trawle.com/jobs?q=react&location=copenhagen&remote=true&seniority=senior&posted_within=1d
https://trawle.com/jobs.md?role=frontend-engineer&where=2618425&workplace=remote
```

This is a **stable public contract**: existing parameter meanings are preserved. Extensions are additive; incompatible changes require a new version. The interactive website's compact search filters remain supported. Discovery starts at [trawle.com/llms.txt](https://trawle.com/llms.txt).

## Parameters

Lists use commas. Values within a filter are OR; different filters are AND. URL-encode spaces and special characters.

| Parameter                   | Meaning                                                                                                                             |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `q`                         | Title/department or company text, 2–100 characters. It is not a natural-language instruction.                                       |
| `location` or `where`       | Place names, aliases, ISO country codes or GeoNames IDs. Examples: `copenhagen`, `DK`, `2618425`, `europe`, `-3`. Up to 20 values.  |
| `role`                      | Role slug, name, common job-title alias or taxonomy ID. Examples: `frontend-engineer`, `Frontend Engineer`, `React Developer`, `2`. |
| `field`                     | Job-family slug, name or taxonomy ID. Example: `software-engineering`.                                                              |
| `remote`                    | `true` means remote; `false` means onsite or hybrid. Omit for any workplace.                                                        |
| `workplace`                 | `remote`, `hybrid`, `onsite`, or a comma-separated list.                                                                            |
| `seniority`                 | `intern`, `entry`, `mid`, `senior`, `lead`, `principal`, `director`, `vp`, `executive`.                                             |
| `type`                      | `full_time`, `part_time`, `contract`, `temporary`, `internship`, `apprenticeship`, `seasonal`, `volunteer`.                         |
| `company`                   | Company slugs. Find them with [company search](https://developers.trawle.com/api/search-companies).                                                              |
| `collection`                | Company collection slugs, such as `yc`.                                                                                             |
| `lang`                      | Posting languages: `en,de,fr,es,nl,pt,it,da,sv,no,fi,pl,ja,zh`.                                                                     |
| `salary`                    | Annual salary range, e.g. `60000-`, `-90000` or `60000-90000`.                                                                      |
| `currency`                  | Currency for `salary`: `USD` (default), `EUR`, `GBP`, `DKK`, `SEK`, `NOK`, `CAD`, `AUD`, `CHF`. Requires `salary`.                  |
| `pay`                       | `listed` requires listed pay.                                                                                                       |
| `posted_within` or `posted` | `1d`, `3d`, `7d`, `30d`. Based on when Trawle first saw a job, not its employer's posting date.                                     |
| `reposts`                   | `hide` for originals or `only` for reposts; omitted includes both.                                                                  |
| `agencies`                  | `include` or `only`. Known agencies are excluded by default, except explicitly named companies.                                     |
| `sort`                      | `newest` (default) or `pay`. Newest uses the employer's posting date, falling back to first seen.                                   |
| `limit`                     | Jobs per page, 1–100; default 25.                                                                                                   |
| `cursor`                    | Opaque value in the returned next-page link. Keep all other filters unchanged.                                                      |

`saved` is accepted for compatibility but never loads a private saved search. Its filters must be included in the URL. Unknown parameters, invalid values, repeated parameters and conflicting aliases are errors. An empty value means the filter is unset.

Names are resolved locally against the bundled gazetteer and taxonomy, without an LLM or Google Maps request. Unknown place names are errors. Ambiguous names such as `London` return candidate IDs; use [the place lookup](https://developers.trawle.com/api/resolve-location) to select the intended one. For example, London, UK is `where=2643743`; London, Ontario is `where=6058560`. Names and aliases can evolve with the bundled data; IDs and slugs are the reproducible form. Returned links use resolved IDs/slugs.

## Reading results correctly

- Read **Applied filters** before describing a search. Place labels include the resolved country and ID.
- A location matches jobs in that place or remote jobs open to people living there. `remote=true` does **not** mean worldwide eligibility. Each result reports its remote scope when known.
- Only open, published jobs are included; withheld postings and superseded-board duplicates are excluded.
- The **data date** says when the dataset was refreshed. It is not the date you requested the page. Data refreshes daily.
- Match counts stop at **10,000+**. Follow the **Next page** link to continue; an empty page is a valid result. HTML pagination works without JavaScript.
- Results include employer application links, Trawle detail links, location, pay when listed, first/last-seen dates and repost counts. Full employer descriptions are not included in Markdown.
- Keep **Data by Trawle** attribution and the employer application links when sharing results.

Markdown responses use `text/markdown`, support HEAD and ETag/304, and may be CDN-cached for up to five minutes. Invalid Markdown requests return HTTP 400; the HTML page explains the error. Neither queries jobs with invalid filters. Results are crawlable but marked `noindex, follow`. Markdown requests use the existing public rate limit.

For daily automation, use [RSS feeds](https://developers.trawle.com/guides/rss-feeds) or [incremental JSON search](https://developers.trawle.com/guides/freshness-and-reposts). HTML/Markdown pages are browsing snapshots, not transactional exports: jobs can change between pages.
