group APIgroup.bnpparibas ↗
Search and retrieve BNP Paribas job and internship listings. Filter by country, contract type, domain, and keyword. Returns titles, locations, descriptions, and apply URLs.
What is the group API?
This API provides access to current job and internship listings from the BNP Paribas careers portal (group.bnpparibas) through 2 endpoints. The search_jobs endpoint returns paginated summaries — title, location, contract type, brand, and URL — across all BNP Paribas entities, while get_job_details delivers the full posting including description, posting date, internal reference ID, and a direct apply URL for any individual offer.
curl -X GET 'https://api.parse.bot/scraper/b040ef85-37c3-459a-8a2f-97c37d8003f2/search_jobs?domain=expertise-financiere-et-technique&country=france&max_pages=1&contract_type=stage' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace group-bnpparibas-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.bnp_paribas_job_listings_api import BNPParibas, ContractType, JobNotFound
bnp = BNPParibas()
# Search for internship job listings in France
for job_summary in bnp.jobsummaries.search(
contract_type=ContractType.STAGE,
country="france",
domain="expertise-financiere-et-technique",
):
print(job_summary.title, job_summary.location, job_summary.brand)
# Navigate from summary to full details
job = job_summary.details()
print(job.date_posted, job.study_level, job.experience_level)
print(job.location.city, job.location.country)
break
# Fetch a specific job by slug
job = bnp.jobs.get(slug="stage-assistant-e-recherche-actions-h-f")
print(job.title, job.contract_type, job.reference)
print(job.apply_url, job.brand_logo)
Search for job listings on the BNP Paribas careers portal with filters. Returns results with title, location, contract type, brand, and URL for each offer. The server paginates internally up to max_pages pages of 10 results each; the response contains all fetched results in one array.
| Param | Type | Description |
|---|---|---|
| domain | string | Job domain/category filter. Accepts a domain slug or a numeric ID. Leave empty to search across all domains. |
| country | string | Country filter. Accepts a country slug (e.g. france, germany) or a numeric ID. Leave empty to search globally. |
| keyword | string | Keyword search query to filter job listings. |
| max_pages | integer | Maximum number of pages to fetch (each page returns up to 10 results). |
| contract_type | string | Contract type filter. |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects with title, location, contract_type, brand, slug, url",
"total": "integer total number of matching jobs found"
},
"sample": {
"data": {
"jobs": [
{
"url": "https://group.bnpparibas/emploi-carriere/offre-emploi/stage-assistant-e-recherche-actions-h-f",
"slug": "stage-assistant-e-recherche-actions-h-f",
"brand": "BNP Paribas Wealth Management",
"title": "STAGE - ASSISTANT(E) RECHERCHE ACTIONS - H/F",
"location": "Paris, Ile-de-France, France",
"contract_type": "Stage"
}
],
"total": 21
},
"status": "success"
}
}About the group API
Endpoints and What They Return
The search_jobs endpoint accepts up to five optional filters: keyword for text search, country (accepts a slug like france or a numeric ID), contract_type, domain (job category slug or numeric ID), and max_pages to control how many pages of up to 10 results are fetched per call. The response returns a jobs array of summary objects — each with title, location, contract_type, brand, slug, and url — alongside a total integer indicating how many matching offers exist across all pages.
Getting Full Posting Details
Once you have a slug from search_jobs results, pass it to get_job_details to retrieve the complete posting. The response includes structured location (broken into city, region, and country), the full description as plain text, date_posted in ISO YYYY-MM-DD format, apply_url, reference (BNP Paribas internal job ID), domain, brand, and brand_logo. This makes it straightforward to build job boards, aggregators, or alert systems that need both summary listings and detailed posting content.
Coverage and Scope
Listings span multiple BNP Paribas brands and entities, covering roles across countries and contract types including internships (stages), fixed-term, and permanent contracts. The domain filter maps to BNP Paribas's internal job category taxonomy, such as financial expertise or IT. The API reflects the current state of the public careers portal; archived or expired postings are not retained once removed from the source.
The group API is a managed, monitored endpoint for group.bnpparibas — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when group.bnpparibas changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official group.bnpparibas API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a filtered job board showing only BNP Paribas internships in France using the
contract_typeandcountryfilters. - Set up a daily alert system that tracks new postings by comparing
date_postedvalues fromget_job_details. - Aggregate listings by
brandto compare hiring activity across BNP Paribas subsidiaries. - Index full job descriptions from
get_job_detailsfor keyword-based matching against candidate profiles. - Extract
referenceIDs andapply_urlfields to pre-populate application tracking systems. - Monitor posting volume by
domainto identify which BNP Paribas business areas are actively recruiting. - Pull
locationdata (city, region, country) to map geographic hiring distribution across the group.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does BNP Paribas provide an official public developer API for its careers portal?+
What does `search_jobs` return, and how does pagination work?+
jobs array of summary objects and a total integer. Results are fetched in pages of up to 10 listings each. The max_pages parameter controls how many pages are fetched per call, so setting max_pages=3 returns up to 30 results in a single response.Does the API return salary or compensation information?+
get_job_details response covers description, location, contract type, domain, posting date, reference ID, and apply URL. You can fork this API on Parse and revise it to add a salary field if BNP Paribas surfaces that data on a specific posting page.