No start URL? Then the keyword picks the search itself: a role name such as product designer becomes Wellfound's own role search (/role/product-designer, all locations, or the remote-only /role/r/product-designer when Remote jobs only is on), which reaches the full job pool instead of the ~50-job landing page. List several roles with commas (data analyst, data engineer, data scientist) and each gets its own search, sharing your maxItems between them. A term that is not a Wellfound role but contains a broader one (performance marketing, B2B sales) searches that broader role (/role/marketing, /role/sales) and keeps the term as a filter there, so you get the jobs that mention it. Other words that are not a Wellfound role are left out of the search and named in the log. A role with "intern" in it (machine learning intern) searches that role and keeps internships only. Used this way, the keyword is not re-applied as a text filter, except on those broader-role searches.
With start URLs, the keyword is a filter: a case-insensitive whole-word match (a word may carry a common ending, so engineer also finds "engineering" and intern finds "internship" but not "internal"), across job title, role slug, company name, market tags, location tags, badge labels, and (when enrichment is on) job description. Rows that don't match are filtered out before being written to the dataset.
Examples:
• rust → keeps rows mentioning Rust
• rust, golang, scala → keeps rows mentioning ANY of the three (OR logic)
• senior → keeps senior-level roles
How well this works depends on your start URL. On a /role/… URL the scraper searches thousands of jobs and the full job description is included in the match, so even a narrow keyword has a real corpus to hit. On a /jobs URL it is filtering a curated set of only ~50 jobs, so a narrow keyword (Cloud Security GRC Specialist) will usually match nothing at all — not a failure, just a tiny pool. The run log says so explicitly when it happens.
Cost behaviour: filtering happens after fetching, so compute is unchanged — but result charges only fire for rows that pass the filter. You never pay for rows you filter out, and maxItems counts kept rows, not fetched ones.
Leave empty to disable filtering.