{
  "openapi": "3.0.1",
  "info": {
    "title": "Visa Sponsored Jobs Scraper — International Tech Roles",
    "description": "Scrape visa-sponsored tech jobs from Relocate.me with company, country, role, seniority, tech stack and relocation package such as flights and housing help. Filter by country, role, level and date; onlyNewJobs mode returns just jobs added since the last run for daily job alerts.",
    "version": "0.2",
    "x-build-id": "xiJ7megcMdfzV9vX2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~visa-sponsored-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-visa-sponsored-jobs-scraper",
        "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/khadinakbar~visa-sponsored-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-visa-sponsored-jobs-scraper",
        "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/khadinakbar~visa-sponsored-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-visa-sponsored-jobs-scraper",
        "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": {
          "searchQuery": {
            "title": "Job title keyword (optional)",
            "type": "string",
            "description": "Optional keyword filter applied to the job title (case-insensitive substring match). Example: 'react' or 'senior backend'. Leave empty to include every job in the role/country slice. NOT a full-text description search — only matches against the job title."
          },
          "country": {
            "title": "Country",
            "enum": [
              "all",
              "netherlands",
              "germany",
              "united-kingdom",
              "spain",
              "portugal",
              "cyprus",
              "new-zealand",
              "japan",
              "singapore"
            ],
            "type": "string",
            "description": "Restrict results to a single country supported by Relocate.me. Use 'all' to scrape across every country. Example: 'germany' or 'united-kingdom'. NOT a free-text city or region filter — pick from the enum.",
            "default": "all"
          },
          "role": {
            "title": "Role / Category",
            "enum": [
              "all",
              "backend",
              "frontend",
              "full-stack",
              "mobile",
              "devops",
              "data-science",
              "qa",
              "security",
              "manager",
              "software-engineer"
            ],
            "type": "string",
            "description": "Restrict results to one of Relocate.me's role categories. 'all' returns every category. Example: 'backend' or 'devops'. NOT a free-text role string — pick from the enum.",
            "default": "all"
          },
          "experienceLevel": {
            "title": "Experience level",
            "enum": [
              "all",
              "junior",
              "mid",
              "senior",
              "staff",
              "principal",
              "lead",
              "manager"
            ],
            "type": "string",
            "description": "Filter by seniority level inferred from the job title (e.g., 'senior', 'staff', 'principal'). Use 'all' to skip the filter. Example: 'senior' for senior+ roles only. NOT a years-of-experience number — pick from the enum.",
            "default": "all"
          },
          "postedSince": {
            "title": "Posted since",
            "enum": [
              "any",
              "today",
              "week",
              "month",
              "quarter"
            ],
            "type": "string",
            "description": "Skip jobs posted before this freshness window, based on the JSON-LD datePosted field. Use 'any' for no freshness filter. Example: 'week' returns only jobs posted in the last 7 days. NOT a free-text date — pick from the enum.",
            "default": "any"
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of jobs to return in this run. Each returned job is charged at $0.005 plus the actor-start fee. Default 50, hard cap 500. NOT a per-page limit — this is the global cap across all paginated pages.",
            "default": 50
          },
          "includeJobDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "When enabled, the scraper visits each job's detail page to extract relocation package items, tech stack, full description, requirements, responsibilities, benefits, and apply URL. Disable for a faster, lower-cost run that only returns title/company/location/URL. Default true. NOT a toggle for skipping the listings step.",
            "default": true
          },
          "persistJobSnapshots": {
            "title": "Persist per-job snapshots to key-value store",
            "type": "boolean",
            "description": "When enabled, every scraped job is also written to the key-value store under the key 'job-{jobId}'. Useful for cross-run de-duplication, audit trails, or rebuilding the dataset later. Default false. NOT required for normal use — the dataset already contains all records.",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs since the last run (job alerts)",
            "type": "boolean",
            "description": "Monitor mode for scheduled job alerts. When true, the Actor remembers the job IDs it returned for this filter set (search query, country, role, experience level and optional monitor name) and, on later runs, returns and charges only jobs it has not returned before. The first run returns everything and sets the baseline. Rows get isNewSinceLastRun: true. Defaults to false.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name (optional)",
            "maxLength": 60,
            "type": "string",
            "description": "Optional label that keeps separate 'only new jobs' histories for the same filters, for example 'team-a-weekly'. Only used when onlyNewJobs is true. Leave empty to share one history per filter set."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Defaults to Apify residential proxy for the most reliable results. Override only if you have a specific need. NOT required to be changed for typical use.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}