Employer Documentation
Use this format if your company does not publish jobs through a supported ATS. WantRemote can ingest a public JSON feed and turn it into source-driven job imports.
This page describes the current v1 employer JSON feed used by self-serve source onboarding.
| Field | Type | Notes |
|---|---|---|
| url | string | Canonical job URL on your website. Must remain stable for the same job. |
| title | string | Human-readable vacancy title. |
| location | object | Either `{ "type": "worldwide" }` or `{ "type": "countries", "countries": ["US", "CA"] }`. |
| employmentType | string | Must match one of the supported enum values listed below. |
| description | string | HTML or plain text job description. Keep it substantive and complete. |
| applyUrl | string | Direct application URL on the employer website. |
| salary | object | Optional. Include currency and any available min/max compensation values. |
WantRemote only accepts remote jobs through the JSON feed. Do not include hybrid or onsite roles in the same feed.
Use one of the existing employment type enum values supported by the platform.
`location` must be one of two shapes:
{ "type": "worldwide" }{ "type": "countries", "countries": ["US", "CA", "GB"] }`countries` must contain ISO 3166-1 alpha-2 country codes. Example supported codes: US, CA, GB, DE, NL, PL, AU.
The platform country enum currently supports codes such as AF, AX, AL, DZ, AS, AD, AO, AI, AQ, AG, AR, AM and many others.
Salary is optional, but recommended when available.
{
"salary": {
"currency": "USD",
"min": 140000,
"max": 180000,
"interval": "year"
}
}
This is a valid example of the JSON structure expected by the current self-serve onboarding flow.
{
"jobs": [
{
"url": "https://jobs.example.com/senior-backend-engineer",
"title": "Senior Backend Engineer",
"location": {
"type": "worldwide"
},
"employmentType": "full_time",
"description": "<p>Build and scale backend systems for a fully remote product team...</p>",
"applyUrl": "https://jobs.example.com/senior-backend-engineer/apply",
"salary": {
"currency": "USD",
"min": 140000,
"max": 180000,
"interval": "year"
}
},
{
"url": "https://jobs.example.com/product-designer",
"title": "Product Designer",
"location": {
"type": "countries",
"countries": ["GB", "DE", "NL", "PL"]
},
"employmentType": "full_time",
"description": "<p>Design user flows, interfaces, and experiments for remote-first products...</p>",
"applyUrl": "https://jobs.example.com/product-designer/apply"
}
]
}
Use this simplified schema as an implementation guide for backend teams exposing a compatible feed.
{
"type": "object",
"required": ["jobs"],
"properties": {
"jobs": {
"type": "array",
"items": {
"type": "object",
"required": ["url", "title", "location", "employmentType", "description", "applyUrl"],
"properties": {
"url": { "type": "string", "format": "uri" },
"title": { "type": "string", "minLength": 1 },
"location": {
"oneOf": [
{
"type": "object",
"required": ["type"],
"properties": {
"type": { "const": "worldwide" }
}
},
{
"type": "object",
"required": ["type", "countries"],
"properties": {
"type": { "const": "countries" },
"countries": {
"type": "array",
"minItems": 1,
"items": { "type": "string", "pattern": "^[A-Z]{2}$" }
}
}
}
]
},
"employmentType": {
"type": "string",
"enum": ["full_time", "part_time", "contractor", "temporary", "intern", "volunteer", "per_diem", "other"]
},
"description": { "type": "string", "minLength": 120 },
"applyUrl": { "type": "string", "format": "uri" },
"salary": {
"type": "object",
"required": ["currency"],
"properties": {
"currency": { "type": "string", "pattern": "^[A-Z]{3}$" },
"min": { "type": "number" },
"max": { "type": "number" },
"interval": { "type": "string", "enum": ["hour", "day", "week", "month", "year"] }
}
}
}
}
}
}
}