DEV Community

Daniel Meshulam
Daniel Meshulam

Posted on

Ashby's isRemote flag is true for hybrid roles. I checked 1,668 postings.

If you build anything on Ashby's public job board API, there is one field that
will quietly ruin your filter.

isRemote is a boolean. It is not the boolean you think.

I pulled every posting from ten real Ashby boards on 2026-08-02, 1,668 in
total, and counted:

postings share
isRemote: true 1,072 64%
workplaceType: "Remote" 295 18%

Filter on the boolean and you get three and a half times as many roles as are
actually remote.

It is not noise, it is a definition

Cross-tabulating the two fields across nine of those boards, 1,637 postings,
leaves no ambiguity at all:

workplaceType    isRemote    postings
Hybrid           true             776
Remote           true             295
OnSite           false            271
(absent)         false            295
Enter fullscreen mode Exit fullscreen mode

Zero exceptions in 1,637 rows. isRemote is exactly
workplaceType != "OnSite", with an absent type counting as on-site.

So the field is honest about what it computes and misleading about what it is
called. It means not fully on-site. Hybrid roles, 47% of everything I
pulled, all carry it.

The per-company spread is the part that bites

An average of 3.6x would be survivable. The variance is not:

board postings isRemote true actually Remote overstated
openai 754 485 32 15.2x
replit 88 88 6 14.7x
ramp 126 117 16 7.3x
notion 109 74 0 everything
cohere 142 131 100 1.3x
vanta 100 90 63 1.4x
cursor 120 47 41 1.1x
sierra 175 16 15 1.1x
linear 23 23 22 1.0x

Linear is honest by accident: nearly all its roles genuinely are remote, so the
two fields agree. Notion is the opposite extreme. It has zero roles marked
Remote and 74 postings flagged isRemote: true, because Notion is a hybrid
company and every hybrid role trips the flag.

Which means any sanity check you run on one company can pass and tell you
nothing. Test on Linear and the field looks perfect. Test on Notion and every
result is wrong.

Three states, not two

The real fix is not a better boolean, it is admitting that this is not a
boolean question. workplaceType has three values, and the third one is the
one people actually argue about:

Remote   295
Hybrid   776
OnSite   271
Enter fullscreen mode Exit fullscreen mode

Collapsing that into yes-or-no has to lie in one direction or the other.
Ashby's boolean lies toward remote; a boolean built the other way would tell
776 people a hybrid role is on-site, which is equally wrong and would just
annoy a different group.

If you are normalising job data across sources, carry all three. A row that
says Hybrid is more useful than a row that says true, and it is the only
version you can aggregate honestly.

The 295 with nothing set

There is a fourth group worth knowing about: 295 postings, 18% of that
cross-tab, carry no workplaceType at all. They all come back isRemote: false.

That is a company that never filled the field, being reported as not remote. It
might be. Nobody said so. If you are ranking or filtering, treat an absent
workplace type as unknown rather than as a no, because the API has already made
that judgement for you and it had nothing to go on.

Getting the field at all

One more trap, unrelated but in the same request. Ashby omits compensation
entirely unless you ask:

GET /posting-api/job-board/ramp                            no compensation key
GET /posting-api/job-board/ramp?includeCompensation=true   "$211.4K - $290.6K"
Enter fullscreen mode Exit fullscreen mode

I had that parameter wired to a description flag in my own client for a while,
which meant every run that did not ask for descriptions silently dropped
salary. Worth reading a response you are sure you already understand.

What I would actually do

def workplace(posting):
    """Three states, and unknown is not a no."""
    wt = posting.get("workplaceType")
    if wt in ("Remote", "Hybrid", "OnSite"):
        return wt
    return "Unknown"          # NOT False, and not isRemote
Enter fullscreen mode Exit fullscreen mode

Four lines, and it is right on all 1,668.

None of this is Ashby's fault exactly. isRemote is doing what it says in the
code that produced it. It is just that the name promises an answer to a
question the data cannot answer, and a boolean will always find someone willing
to believe it.


Every number here is from the public job board API, no key, and reproducible:
api.ashbyhq.com/posting-api/job-board/<board>?includeCompensation=true. I
maintain a set of ATS scrapers that normalise
this across nine systems, which is how I ran into it.

Top comments (0)