Torre Jobs & Recruiters Scraper: Tech Jobs + Hiring Contacts
Open jobs only, and the person who posted them — with EU residents left out by default.
Open job posts from Torre (torre.ai) with the company person who posted them, the visible hiring team, the company website and domain, salary, skills and remote policy. A second mode returns the recruiters themselves, one row per person, with their public Torre profile.
oswaldocarabano/torre-jobs-recruiters-scraper
{
"roles": ["backend developer", "full stack developer"],
"remoteOnly": true,
"countries": ["Colombia", "Mexico"],
"maxItems": 100,
"includeRecruiterProfile": true
}- Version
- v0.1.3
- Memory
- 512 MB
- Browser
- none
- Proxy
- None needed (measured); built-in fallback
Short answer
The Torre Jobs & Recruiters Scraper exports open job posts from torre.ai with the company person who posted each one, the hiring team, the company website and domain, salary and skills. Torre keeps closed posts in its search — 65 of 2,813 remote "software engineer" posts were open on 1 October 2026 — so the Actor returns open posts by default. On 330 open posts measured with the full job page, the domain was filled on 79.1% and the posting recruiter on 40.6%, rising to 97.1% of the 138 posts published by companies themselves. People located in the EU, EEA, UK or Switzerland are left out unless you opt in. Pricing starts at $3 per 1,000 job posts.
Key points
- Torre's search mixes open and closed posts: 65 of 2,813 remote software engineer posts were open on 1 October 2026, so the Torre scraper returns open posts by default.
- On 330 open posts with the full job page, the Torre scraper filled the company domain on 79.1% and the posting recruiter on 40.6%.
- Torre aggregates 58.2% of open posts from other job sites; those posts have no company recruiter, while company-published posts carry one on 97.1% of 138.
- Recruiter rows are personal data: name, headline, Torre profile, LinkedIn on 77.8% of 90 profiles, location and current position.
- People whose Torre profile places them in the EU, EEA, UK or Switzerland — 4 of 90 profiles measured — are excluded unless `includeEuRecruiters` is turned on.
- The email pattern is DNS-only and on 1 October 2026 all 45 measured domains had no email evidence, so every pattern was a free low-confidence guess.
- torre.ai/robots.txt disallows `/api/`, which the job-page and profile reads use; the Actor's README and this page both state that.
What it does
Open job posts from Torre (torre.ai) with the company person who posted them, the visible hiring team, the company website and domain, salary, skills and remote policy. A second mode returns the recruiters themselves, one row per person, with their public Torre profile.
{
"rowType": "job",
"opportunityId": "AbCd1234",
"url": "https://torre.ai/post/AbCd1234-acme-labs-senior-backend-engineer",
"title": "Senior Backend Engineer",
"status": "open",
"remote": true,
"countries": ["Colombia", "Mexico"],
"compensation": { "code": "range", "currency": "USD", "min": 4000, "max": 6000, "periodicity": "monthly" },
"organization": { "name": "Acme Labs", "size": 40, "website": "https://www.example.com", "domain": "example.com" },
"domain": "example.com",
"postedBy": { "name": "Jane Doe", "headline": "Talent Partner at Acme Labs", "profileUrl": "https://torre.ai/janedoe" },
"members": [{ "name": "John Roe", "headline": "Co-Founder & CTO", "isManager": true }],
"postedByTorre": false,
"talentSeekerInactive": false,
"emailPattern": { "domain": "example.com", "pattern": "first.last", "confidence": 0.1, "inferred": true, "mxValid": true, "catchAll": null },
"detailScraped": true,
"scrapedAt": "2026-10-01T23:30:00.000Z"
}Why this one
Open posts, not the whole archive
Torre's search returns closed posts alongside open ones, and in one measured query only 65 of 2,813 were open. A dataset that does not filter on status is mostly vacancies that no longer exist. The Torre Jobs & Recruiters Scraper filters to open by default and returns closed posts only when `status` asks for them.
Company-published and aggregated posts are told apart
On 1 October 2026, 58.2% of open Torre posts were aggregated from other job sites. Those rows carry `postedByTorre: true` and the original application link, but no company recruiter. Company-published posts carry the recruiter on 97.1% of 138 measured, and every fill rate is published split by those two populations.
EU residents are excluded before delivery
The Torre scraper reads the public profile of every person it is about to deliver, free of charge, to check their location. People in the EU, EEA, UK or Switzerland are dropped unless the operator opts in; in job rows their fields become null with `euRedacted: true`. A person whose location cannot be read is delivered and counted as unknown.
Email patterns are labelled as guesses
Torre publishes almost no emails — 2.1% of job descriptions in the 330-post sample. The email pattern is therefore usually a guess from the mail provider, at confidence 0.10 and flagged `inferred: true`. Guesses are free; only a pattern backed by emails found on Torre is charged.
Use cases
- Find open remote tech jobs with a salary range in USD, time zones and the person who posted them.
- Map companies hiring now, with website, domain, team size and the visible hiring team.
- Enrich an existing list of Torre job URLs with the full page, team and company domain.
- Build a salary dataset from Torre's structured compensation, including hourly USD equivalents.
Input
Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.
| Field | Default | What it does |
|---|---|---|
outputTypeenum | jobs | What to scrape`jobs` for one row per job post, or `recruiters` for one row per company person who publishes jobs, deduplicated. |
jobUrlsstring[] | [] | Job URLsTorre job links or ids to enrich instead of searching, up to 5,000. The search filters are then ignored. |
rolesstring[] | ["software engineer"] | Roles or skillsMatched like Torre's search box. Several means any of them; empty means all. |
remoteOnlyboolean | true | Remote onlyOff adds on-site and hybrid jobs near the main cities of the chosen countries: slower, and by city rather than exhaustive. |
statusenum | open | Job status`open`, `closed` or `any`. |
countriesstring[] | [] | CountriesJobs located in, or open to candidates from, these countries. |
jobTypesstring[] | [] | Job typesOn Torre, part-time also covers freelance and flexible jobs. |
organizationsstring[] | [] | CompaniesCompany names as shown on Torre. |
minMonthlyCompensationUsdinteger | 0 | Minimum monthly pay (USD)Posts that hide their pay are excluded by Torre when this is set. |
maxItemsinteger | 20 | Maximum rowsJob posts or recruiters to deliver. |
scrapeDetailsboolean | true | Full job pageAdds the description, website and domain, hiring team, languages, contract type and reputation. One extra charge per post. |
includeRecruiterProfileboolean | false | Recruiter profilepersonal dataAdds the posting person's public Torre profile: location, LinkedIn, summary, position, languages and skills. Charged once per person. |
inferEmailPatternboolean | false | Company email patternpersonal dataDNS-only email format with MX records and provider, plus a guessed email per recruiter. Charged only when backed by emails found on Torre. |
includePersonalEmailsboolean | false | Include personal emailspersonal dataPersonal-domain addresses in descriptions are hidden unless this is on. |
includeEuRecruitersboolean | false | Include EU/EEA/UK recruiterspersonal dataPeople located in the EU, EEA, UK or Switzerland are left out unless this is on and you have a lawful basis. |
maxConcurrencyinteger | 4 | Requests in parallelNo refusals measured up to 24. |
Output and fill rates
A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.
| Field | Filled | Meaning |
|---|---|---|
titlestring | 100% | With tagline, status, remote flag and creation date. |
descriptionTextstring | 100% | Full description, with languages. Full job page only. |
organization.namestring | 98.2% | Company name as shown on Torre. |
skillsobject[] | 96.7% | Skill, proficiency and experience level. |
organization.websitestring | 95.8% | 89.9% on company-published posts, 100% on aggregated ones. |
domainstring | 79.1% | Cleaned of job-board and social links. 87.7% on company-published posts, 72.9% on aggregated. |
countriesstring[] | 76.4% | Where the job is, or who may apply. |
compensation.minnumber | 40.9% | With currency, periodicity and hourly USD. 63.8% on company-published posts. |
postedByobject | 40.6% | The company person who posted the job. 97.1% of company-published posts, 0% of aggregated ones. Personal data. |
membersobject[] | 69.7% | Visible hiring team, at least one company person. Personal data. |
reputation.organizationRatingnumber | 56.4% | Company rating on Torre, 1–5. |
postedBy.profile.linkedinUrlstring | 77.8% | With `includeRecruiterProfile`. Of 90 recruiter profiles measured. |
emailPatternobject | not measured | DNS-only: MX validity, provider, likely format with confidence. 45 of 45 measured domains were inferred guesses. |
Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.
Datasets
Different record types go to different datasets, so the main table never carries columns that are blank on most rows.
defaultOne row per job post, or one row per recruiter with `outputType: recruiters`.billedRUN_SUMMARYRows delivered and charged, EU exclusions, unknown locations and hidden personal emails.never billed
Pricing
Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.
| Event | Price | Notes |
|---|---|---|
apify-actor-startActor start | $0.00001 | Platform minimum, one event per GB of memory. |
jobJob post | $0.003 | One open job post: title, company, salary range, skills, remote policy, locations, time zones and the recruiter shown on Torre. $3 per 1,000. |
job-detailFull job page | $0.008 | Adds the full description, company website and domain, hiring team, languages, contract type, application link and reputation. On by default. |
recruiter-profileRecruiter profile | $0.01 | One recruiter's public Torre profile. Charged once per person per run. |
email-patternCompany email pattern | $0.01 | Once per domain per run, only when backed by real emails found on Torre. Provider-based guesses are free. |
Measurements
Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.
Field sample
330 open job posts
Measured on 1 October 2026 with the full job page: 138 published by companies and 192 aggregated by Torre. Rates are published for both groups.
Open share of a search
65 of 2,813
Remote "software engineer" posts on Torre on 1 October 2026; the rest were closed.
Recruiter profiles
90 profiles
Location 100%, LinkedIn 77.8%, current position 73.3%. 4 of 90 were located in the EU, EEA, UK or Switzerland.
Email evidence
0 of 45 domains
Domains measured on 1 October 2026; 42 of 45 had valid MX records. Every pattern was inferred at confidence 0.10.
Search coverage with no filters
14,684 unique open posts in 9 minutes
Remote and on-site, all countries, 2 October 2026: 88% of the 16,699 Torre listed on 1 October, and 91% of the posts in Torre's sitemaps.
Refusals
0 in about 1,100 requests
13 runs from Apify servers on 2 October 2026, up to 6 at once, with no proxy.
What it will not do
Stated plainly so you can judge fit before spending anything.
- Recruiter fields apply mainly to the 41.8% of open posts that companies publish themselves; aggregated posts have no company recruiter.
- Salary minimum is filled on 40.9% of 330 posts: 63.8% of company-published posts and 24.5% of aggregated ones.
- On-site and hybrid jobs are searched around the main cities of each country, about 30–50 km each, so on-site coverage is by city and not exhaustive.
- Since 2 October 2026 Torre only answers searches made for a person; the Actor uses a public Torre profile as that context with its skills and preferences removed. Results come in Torre's relevance order, not by date.
- The email pattern is almost always an inferred guess: all 45 domains measured on 1 October 2026 had no email evidence.
- torre.ai/robots.txt disallows `/api/` and Torre's terms prohibit scraping; the full job page and profile reads use `/api/` paths.
Privacy
- Recruiter rows and the `postedBy` and `members` fields are personal data about named people who post jobs or appear on a hiring team.
- People whose Torre profile places them in the EU, EEA, UK or Switzerland are excluded by default; including them requires `includeEuRecruiters` and a lawful basis.
- Torre publishes no personal emails, and the Actor never guesses addresses outside the company domain; personal-domain emails in descriptions are hidden unless `includePersonalEmails` is on.
- Team members Torre hides on the public job page and screening messages written by candidates are never delivered.
- No email is ever sent and no mail server is probed.
- Removal requests: privacy@actorstack.dev
See also the data removal process.