DEV Community

quietbyte
quietbyte

Posted on

"Remote" doesn't mean "anywhere": I built an API that checks if you can actually apply

If you've looked for remote work from outside the US, you know the routine: find a great "remote" role, write a cover letter, scroll to the bottom of the ad, and read "US residents only."

So I measured it. In a sample of 200 recent jobs on Jobicy, 118 were open to US residents only. "Remote" usually means "remote within one country."

I built Remote Jobs by Country, an Apify Actor that pulls jobs from Himalayas, Remote OK, We Work Remotely and Jobicy and answers one question for each job: can someone living in country X apply?

The hard part: every board says it differently

The four boards describe "where can you work from" in four formats:

Board What you get
Himalayas A list of country names (empty means worldwide) plus a list of UTC offsets
Jobicy Free text: "APAC, EMEA, LATAM, Canada, USA"
We Work Remotely A region ("Anywhere in the World") and a country field full of flag emojis: πŸ‡ΊπŸ‡Έ United States of America
Remote OK Free text that is often empty, or just "Remote"

So the core of the Actor is a small geo parser that turns all of these into the same shape:

@dataclass
class Geo:
    worldwide: bool
    countries: set      # ISO2 codes
    regions: set        # APAC, EMEA, EU, LATAM, ...
    excluded: set       # "Anywhere (not in the US, CA, UK)"
    timezones: list     # UTC offsets
    basis: str          # "listing" | "description" | "none"
    evidence: str | None
Enter fullscreen mode Exit fullscreen mode

Then open_to(geo, "DE", utc_offset=1) returns yes, no or unclear.

Things that tripped me up

"CA" is not Canada. In free text, "CA" is far more often California, and "IN" is a preposition, not India. Two-letter codes only count from a small safe set (US, UK, UAE), in upper case. The one exception is inside an exclusion list like "not in the US, CA, UK, NZ, or AU", where they are clearly countries.

"Bosnia and Herzegovina" contains "and". Splitting on " and " to handle "Netherlands and United Kingdom" broke country names like "Trinidad and Tobago". The fix is to try the whole token as a country first, and split only if it doesn't match.

Flag emojis are just two letters. πŸ‡©πŸ‡ͺ is the regional-indicator pair D + E, so you can decode it with arithmetic, no lookup table needed.

A list of every time zone is no restriction. Some Himalayas jobs list all 24+ UTC offsets. Treating that as a filter would be silly, so it counts as "no time-zone limit."

When the board says nothing, read the ad, but carefully. Remote OK's location is often empty. The Actor then looks for one sentence in the description that says where the person must live ("You must be based in Europe") and uses that, keeping the sentence as evidence. If there is no such sentence, the answer is unclear. A wrong yes costs someone a cover letter.

What a record looks like

{
  "title": "Senior Software Engineer, Internal Tooling",
  "company": "RevenueCat",
  "location": "APAC, EMEA, USA",
  "eligibleRegions": ["APAC", "EMEA"],
  "eligibleCountries": ["US"],
  "eligibilityBasis": "listing",
  "eligibilityEvidence": "APAC, EMEA, USA",
  "openToApplicant": "yes",
  "visaSponsorship": "not_mentioned",
  "alsoListedOn": [],
  "attribution": "Job from Jobicy (jobicy.com). ..."
}
Enter fullscreen mode Exit fullscreen mode

Other things it does:

  • Deduplicates across boards. The same job on two boards becomes one record, with the other link in alsoListedOn.
  • Adds visa-sponsorship tags, read sentence by sentence, because "visa sponsorship" in an ad usually means "not available."
  • Carries an attribution string per board. All four boards allow reuse if you credit them, so the rule travels with the data.
  • Monitoring mode. Schedule it daily and it only returns, and only charges for, jobs it hasn't seen before.

Sources, honestly

The Actor uses only the boards' own public APIs and RSS feeds, within the terms each one publishes: no logins, no proxies, no browser automation. I left out boards whose terms didn't allow this kind of use, even ones with nice APIs.

Try it

It's an Apify Actor: Remote Jobs by Country. Put in your country code (DE, BR, IN…), and optionally your UTC offset and some keywords. It costs $1.50 per 1,000 jobs, and filtered-out jobs and duplicates are free.

If you're after jobs on company career pages instead, there are two sister Actors:

If a job is marked wrong for your country, tell me in the comments or open an issue on the Actor page. Every rule in the parser came from a real ad that broke it.

Top comments (0)