Most job feeds hand you everything and let you filter. That is fine until you are paying per row, and roughly three in five postings never state a number. Here is the same pool, split by whether the employer actually published pay:
This is a property of the board, not of the employer's generosity: Greenhouse usually carries pay in the description, Ashby ships a structured field, Lever almost never does, Workable does not have a field at all.
| Board | Postings | With pay | Rate |
|---|---|---|---|
| greenhouse | 11,561 | 5,133 | 44.4% |
| ashby | 5,356 | 2,742 | 51.2% |
| lever | 1,751 | 164 | 9.4% |
Billing is per returned row, so rows removed by salaryOnly are never charged. Move the slider to see the arithmetic - start fee $0.0005 per run plus $0.0015 per row you keep:
Without the filter you would be paying the same $0.0015 per row for a stream that is only ~43% usable, and you would spend your own compute or eyeballs separating the rest.
One switch on the ATS Job Feed actor:
{"useVerifiedPool": true, "salaryOnly": true, "maxJobs": 100}
Add "minSalaryUsd": 150000 to keep only postings that clear a floor, or "includeDescriptions": false for a cheaper run that still carries pay for Ashby and Lever (Greenhouse pay lives inside the description, so it disappears in that mode). If you do not want to pay at all, the same numbers are in the free CSV (8,039 rows, CC BY 4.0) and you can check a single employer on the lookup page.
fxDate in each run summary. Unknown currencies stay null.failedCompanies instead of silently shrinking.