{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Scraper",
    "description": "Remote job board scraper: RemoteOK, WeWorkRemotely & more remote job sites, no API key. Remote job search: remote jobs worldwide, remote work, remote developer jobs, work from home jobs. Job alert: new remote jobs alerts to Slack, remote jobs Slack digest, job notifications. Remote jobs, one feed.",
    "version": "0.1",
    "x-build-id": "iAFRTTmBlgiUll818"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/flash_scraper~remote-job-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-flash_scraper-remote-job-aggregator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/flash_scraper~remote-job-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-flash_scraper-remote-job-aggregator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/flash_scraper~remote-job-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-flash_scraper-remote-job-aggregator",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords, case-insensitive: ANY term matches (OR); a multi-word term needs every word. Empty = every job. Max 10 terms; extras ignored. Scope: matchDescriptions. onlyNewJobs memory keys on exact text.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "matchDescriptions": {
            "title": "Match descriptions too",
            "type": "boolean",
            "description": "On: terms also match tags and the first 500 description characters. Off: title only. The Console form starts ticked; API and scheduled inputs that omit it stay title-only (stored default false).",
            "default": false
          },
          "boards": {
            "title": "Boards",
            "type": "array",
            "description": "Default: every board except Arbeitnow (opt-in). Adding or removing a board starts a fresh onlyNewJobs baseline. Cross-board duplicates (same URL or title + company) are billed once.",
            "items": {
              "type": "string",
              "enum": [
                "remoteok",
                "weworkremotely",
                "working_nomads",
                "devitjobs_us",
                "devitjobs_uk",
                "muse",
                "remotive",
                "jobicy",
                "himalayas",
                "hn_hiring",
                "arbeitnow"
              ],
              "enumTitles": [
                "Remote OK",
                "We Work Remotely",
                "Working Nomads",
                "DevITjobs US (remote rows only)",
                "DevITjobs UK (remote rows only)",
                "The Muse (remote filter)",
                "Remotive",
                "Jobicy",
                "Himalayas",
                "Hacker News \"Who is hiring?\" (remote posts only)",
                "Arbeitnow (opt-in — Germany-centric, remote rows only)"
              ]
            },
            "default": [
              "remoteok",
              "weworkremotely",
              "working_nomads",
              "devitjobs_us",
              "devitjobs_uk",
              "muse",
              "remotive",
              "jobicy",
              "himalayas",
              "hn_hiring"
            ]
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 4000,
            "type": "integer",
            "description": "Max deduplicated jobs per run across all boards. Depth is source-limited, not unlimited: The Muse ~1,980 rows, Himalayas a time-boxed deep crawl, Jobicy 200 per call; other feeds ~20-460 rows.",
            "default": 100
          },
          "includeDescription": {
            "title": "Include full descriptions",
            "type": "boolean",
            "description": "On: the description column carries the full text. Off (default): its first 2,000 characters, cut with …, plus the always-on 500-character description_snippet. DevITjobs: null either way.",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Skips jobs earlier onlyNewJobs runs of this search (terms, boards, filters) delivered. Run 1 = baseline, billed up to maxItems; overflow bills later. Nothing new = 0 rows billed. Memory: your account.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Drop postings older than N days (by posted_at). 0 (default) = off, no limit; the Console form starts at 90. Undated rows are kept unless strictFilters is on.",
            "default": 0
          },
          "salaryMinAnnual": {
            "title": "Minimum annual salary",
            "minimum": 0,
            "type": "integer",
            "description": "Drop postings whose annualized salary_max (else salary_min) is below N. 0 (default) = off. Currency-agnostic: compared as published. Rows with no salary are kept unless strictFilters is on.",
            "default": 0
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Keep jobs open to ANY of: ISO-2 codes or names, regions EU, LATAM, APAC, EMEA, Americas. Worldwide/remote match; blank/unreadable kept unless strictFilters is on. DevITjobs/Arbeitnow: list US/GB/DE.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "seniority": {
            "title": "Seniority",
            "type": "array",
            "description": "Keep postings whose derived seniority column (the board's level field, else title keywords) is one of these. Unknown seniority is kept unless strictFilters is on. Empty (default) = off.",
            "items": {
              "type": "string",
              "enum": [
                "entry",
                "junior",
                "mid",
                "senior",
                "lead",
                "staff",
                "principal",
                "manager",
                "director"
              ],
              "enumTitles": [
                "Entry level / intern / graduate",
                "Junior",
                "Mid level",
                "Senior",
                "Lead",
                "Staff",
                "Principal",
                "Manager",
                "Director (also VP / Head of / C-level)"
              ]
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title has ANY term as a phrase (plus tags/snippet if matchDescriptions). Case-insensitive substring; up to 4 letters: whole word. Never billed. Starts a fresh onlyNewJobs baseline.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Drop jobs whose company has ANY term as a phrase. Case-insensitive substring; up to 4 letters: whole word (IBM does not drop IBMX). Never billed. Starts a fresh onlyNewJobs baseline.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "strictFilters": {
            "title": "Strict filters",
            "type": "boolean",
            "description": "Off (default): rows missing a filter's data (no date, no salary, unreadable location, unknown seniority) are kept. On: they are dropped. No effect without a date, salary, country or seniority filter.",
            "default": false
          },
          "webhookUrl": {
            "title": "Alert webhook URL (Slack, Discord, n8n, Make, Zapier…)",
            "type": "string",
            "description": "Optional. POSTs a digest (Slack/Discord message, else JSON with the first 20 rows) only when a run delivers rows; quiet runs send nothing. Pair with onlyNewJobs. Best-effort: never fails the run."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}