Universitat de Barcelona Jobs: PhD, Postdoc & Research
Pricing
from $3.10 / 1,000 job results
Universitat de Barcelona Jobs: PhD, Postdoc & Research
Scrape currently-open vacancies from Universitat de Barcelona's official vacancy board — PhD/predoctoral contracts by default, or postdoc, research, teaching and staff jobs via keyword. No API key needed. Incremental new-only runs for scheduled alerts.
Universitat de Barcelona Jobs Scraper — PhD, Postdoc & Research
Claude / Codex skill to describe and setup this actor: SKILL.md
Scrapes currently-open vacancies from Universitat de Barcelona's official public-vacancy board (the UB seu electrònica → Ofertes de feina) — the same board UB itself publishes to.
No API key. No proxy. No AI credits. Just run it.
By default it returns open PhD / predoctoral research contracts. Change one field and it returns postdoc, research, teaching, technical or administrative vacancies instead — or all of them at once.
What you get
One flat JSON record per vacancy:
| Field | Meaning |
|---|---|
id | UB's own numeric vacancy id — stable across runs |
title | Full convocatòria title (UB states the department, funding project and contract type inline) |
company | Always "Universitat de Barcelona" |
location | Always "Barcelona, Spain" |
url | Link to the official vacancy page, where the bases and application form are attached |
postedAt | Publication date (YYYY-MM-DD), or null if UB didn't state one |
deadline | Explicit application deadline from an attached PDF (YYYY-MM-DD), or null |
deadlineEvidence | PDF URL, title and exact labelled deadline excerpt, or null |
snippet | Short description excerpt |
source | Always "ub_doctoral" |
Deadline policy: UB publishes application deadlines only inside the PDF bases attached to each vacancy — never on the listing or detail HTML. The Actor accepts a date only when PDF text explicitly labels it as the application deadline and returns that excerpt in deadlineEvidence. Otherwise deadline remains null; publication and modification dates are never substituted.
Every run also emits one uncharged RUN-SUMMARY row using schema nomad-agent-source-run-summary-v1. Its status distinguishes a genuinely empty source from complete, partial, or failed document enrichment, and its counters reconcile listings, detail attempts, attachment failures, and complete jobs.
Input
| Field | Default | What it does |
|---|---|---|
keyword | predoctoral | Full-text search against UB's own board. Try postdoctoral, investigador, Física, a project name… Set it to an empty string to get every open UB vacancy. |
maxItems | 12 | Cap on vacancies returned (0 = no limit). Each one is billed as one result. |
postedSince | — | Only vacancies published on or after this date. |
Only currently-open vacancies are ever returned — closed and in-progress calls are filtered out by UB server-side, so you never pay for a result you can't apply to.
Run it from your own code
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/ub-doctoral-scraper").call(run_input={"keyword": "predoctoral", # "" for every open UB vacancy"maxItems": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["postedAt"], item["title"], item["url"])
Or a single HTTP call that runs the Actor and returns the items in one response:
curl -X POST \"https://api.apify.com/v2/acts/nomad-agent~ub-doctoral-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"keyword": "predoctoral", "maxItems": 50}'
Export the dataset as JSON, CSV, Excel or XML, or read it over the Apify API.
Pricing
Pay per event: a small actor-start fee plus a per-vacancy result fee. Your total is the start fee plus the number of vacancies returned.
Notes & limits
- Covers Universitat de Barcelona only. For EU-wide academic vacancies, see our EURAXESS and jobs.ac.uk scrapers.
- UB publishes vacancy titles mostly in Catalan (some Spanish/English).
keywordmatches whatever UB actually wrote, so Catalan terms (predoctoral,investigador,professorat) match best. - If a run can't reach UB or a populated listing collapses during PDF enrichment, it still finishes as a succeeded run with a
failed_enrichmentRUN-SUMMARY that explains the loss. A real zero-listing result is reported asempty_source.
Found a bug, or want another Spanish university covered? Open an issue on the Actor — and if it works for you, a review helps a lot.
From the maker of Oink — an open-source, AI-powered job-search bot for Telegram that runs on these Actors. Try the free bot, get a managed instance at oinkjobsearch.com, or browse the full catalog of 50+ Actors.