{
  "openapi": "3.0.1",
  "info": {
    "title": "Torre Jobs & Recruiters Scraper: Tech Jobs + Hiring Contacts",
    "description": "Scrape open remote tech jobs from Torre (torre.ai) with the recruiter who posted them, the company website and domain, salary, skills and team. Optional recruiter profile (LinkedIn, location) and company email pattern from DNS. Open jobs only by default.",
    "version": "0.1",
    "x-build-id": "ayCeC8hUWJjFdhzCp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/oswaldocarabano~torre-jobs-recruiters-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-oswaldocarabano-torre-jobs-recruiters-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/oswaldocarabano~torre-jobs-recruiters-scraper/runs": {
      "post": {
        "operationId": "runs-sync-oswaldocarabano-torre-jobs-recruiters-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/oswaldocarabano~torre-jobs-recruiters-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-oswaldocarabano-torre-jobs-recruiters-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": {
          "outputType": {
            "title": "What to scrape",
            "enum": [
              "jobs",
              "recruiters"
            ],
            "type": "string",
            "description": "One row type per run. \"Job posts\" = one row per job with the company, salary, skills and the recruiter who posted it. \"Recruiters\" = one row per company person who publishes jobs (deduplicated), with their public profile, LinkedIn and the jobs they posted.",
            "default": "jobs"
          },
          "jobUrls": {
            "title": "Job URLs (optional)",
            "type": "array",
            "description": "Skip the search and enrich exactly these Torre job posts: links like https://torre.ai/post/2wzYYqmW-company-role, or just the job id. Each one gets the full job page, the hiring team, the company website and domain and, if turned on, the recruiter profile and email pattern. When set, the search filters below are ignored. Up to 5,000. Links outside torre.ai are rejected.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "roles": {
            "title": "Roles or skills",
            "type": "array",
            "description": "Job roles or skills to search, matched like the Torre search box (e.g. \"software engineer\", \"backend developer\", \"data engineer\", \"python\"). Several = any of them. Empty = all job posts. Results come in Torre's relevance order.",
            "default": [
              "software engineer"
            ],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Only remote job posts (2,617 open remote posts on 2 Oct 2026). Turn off to also search on-site and hybrid jobs near the main cities of the countries you choose (or of all covered countries): slower, and on-site coverage is by city (about 30-50 km around each one), not exhaustive.",
            "default": true
          },
          "status": {
            "title": "Job status",
            "enum": [
              "open",
              "closed",
              "any"
            ],
            "type": "string",
            "description": "Open jobs only (default) or also closed ones. Measured 1 Oct 2026: of 2,813 remote \"software engineer\" posts on Torre only 65 were open; closed posts are still useful to find companies that hire and their recruiters.",
            "default": "open"
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Jobs located in, or open to candidates from, these countries. Remote jobs open to a country are included. With \"Remote only\" off, on-site jobs are searched around the main cities of each country. Empty = anywhere.",
            "items": {
              "type": "string",
              "enum": [
                "Argentina",
                "Bolivia",
                "Brazil",
                "Chile",
                "Colombia",
                "Costa Rica",
                "Cuba",
                "Dominican Republic",
                "Ecuador",
                "El Salvador",
                "Guatemala",
                "Honduras",
                "Mexico",
                "Nicaragua",
                "Panama",
                "Paraguay",
                "Peru",
                "Puerto Rico",
                "Uruguay",
                "Venezuela",
                "United States",
                "Canada",
                "Spain",
                "Portugal",
                "United Kingdom",
                "Germany",
                "France",
                "India",
                "Philippines"
              ]
            },
            "default": []
          },
          "jobTypes": {
            "title": "Job types",
            "type": "array",
            "description": "Empty = all. On Torre, \"part-time\" also covers freelance and flexible jobs (same results, measured).",
            "items": {
              "type": "string",
              "enum": [
                "full-time-employment",
                "part-time-employment",
                "internships"
              ],
              "enumTitles": [
                "Full-time employment",
                "Part-time, freelance and flexible jobs",
                "Internships"
              ]
            },
            "default": []
          },
          "organizations": {
            "title": "Companies",
            "type": "array",
            "description": "Only job posts from these companies (name as shown on Torre). Empty = all companies.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minMonthlyCompensationUsd": {
            "title": "Minimum monthly pay (USD)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only job posts whose pay range reaches at least this amount per month, in USD (Torre converts other currencies). 0 = no minimum. Job posts that hide their pay are excluded by Torre when this is set.",
            "default": 0
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum job posts (or recruiters) to deliver. You are charged per row delivered.",
            "default": 20
          },
          "scrapeDetails": {
            "title": "Full job page (website, domain, description, team)",
            "type": "boolean",
            "description": "Adds the full description, company website and domain (95.8% of job posts), the hiring team, languages, contract type, application link and company reputation. One extra request and one \"Full job page\" charge per job post. Needed for the domain and the email pattern.",
            "default": true
          },
          "includeRecruiterProfile": {
            "title": "Recruiter profile",
            "type": "boolean",
            "description": "Adds the public Torre profile of the person who posted each job: location, LinkedIn (77.8% of profiles) and other links, summary, current position, languages and top skills. Charged once per person. Always on for \"Recruiters\".",
            "default": false
          },
          "inferEmailPattern": {
            "title": "Company email pattern",
            "type": "boolean",
            "description": "Adds the likely company email format (e.g. first.last@example.com) with a confidence score, MX records and email provider, plus the guessed email of each recruiter. DNS only: no email is ever sent or verified by SMTP. Charged once per domain only when the pattern is backed by real emails found on Torre; guesses from the email provider alone (most Torre domains) are free and flagged inferred.",
            "default": false
          },
          "includePersonalEmails": {
            "title": "Include personal email addresses",
            "type": "boolean",
            "description": "Emails found in job descriptions are delivered when they are on a company domain. Personal-domain emails (gmail, outlook, yahoo…) are left out, and hidden inside the description texts, unless you turn this on.",
            "default": false
          },
          "includeEuRecruiters": {
            "title": "Include recruiters located in the EU/EEA/UK",
            "type": "boolean",
            "description": "People whose Torre profile places them in the EU, EEA, UK or Switzerland (4.4% of profiles measured) are left out unless you turn this on and have a lawful basis to process their data. The actor reads the public profile of every person it delivers to check this (free; the profile itself is only delivered and charged with \"Recruiter profile\"). If the profile cannot be read, the location is unknown and the person is delivered.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Requests in parallel",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Job pages fetched in parallel. 4 is fast and gentle (no refusals measured up to 24).",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Torre does not need a proxy; the actor has its own fallback if a request is refused. Leave empty.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}