Global Internship Finder
Pricing
from $1.00 / 1,000 results
Global Internship Finder
Discover fresh internships across Europe and beyond, collected automatically from public job boards and company career pages. Normalized, deduplicated, and relevance-scored.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Tuhin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Discover fresh internships across Europe and beyond — collected automatically from public job boards and company career pages, then normalized, deduplicated, and relevance-scored.
Select countries, cities, roles, languages, and remote/hybrid/on-site preference, and get a clean, ranked dataset of validated internships — ready to power an internship search website.
Responsible use: Uses only public / authorized sources and official-style JSON endpoints (The Muse API, Arbeitnow API, Remotive API, and public Greenhouse/Lever ATS boards). It does not log in, scrape LinkedIn/Indeed, bypass CAPTCHAs, or access private/paywalled data. LinkedIn & Indeed are intentionally excluded because their terms/anti-bot controls prohibit it.
Sources (modular — add more by dropping a connector in src/sources/)
| Source | Coverage | Notes |
|---|---|---|
| The Muse | Global, explicit Internship level | Best structured internship source (category + location) |
| Arbeitnow | Europe (esp. Germany) | Public EU job board |
| Remotive | Remote | Remote internships |
| Greenhouse | Per company | Public ATS boards — exposes deadlines & education |
| Lever | Per company | Public ATS boards |
Input (all optional — run with none for a broad EU sweep)
| Field | Description |
|---|---|
countries / cities | Location filters, e.g. ["Germany","Netherlands"], ["Berlin"]. |
categories | Roles, e.g. ["Software Engineering","Data Science","Finance"] (also queries The Muse). |
keywords | Must appear in title/description. |
locationType | any / remote / hybrid / onsite. |
languages | Required languages, e.g. ["English","German"]. |
sources | Which connectors to run. Default ["themuse","arbeitnow","remotive"]. |
greenhouseCompanies / leverCompanies | Company board tokens for ATS sources. |
maxPerSource | Cap per source (default 150). |
minRelevanceScore / maxAgeDays | Quality/freshness filters. |
previousDatasetId | Prior run's dataset → new/expired/deadline-change detection. |
Example inputs
{ "countries": ["Germany","Netherlands"], "categories": ["Software Engineering","Data Science"] }
{ "sources": ["greenhouse","lever"], "greenhouseCompanies": ["stripe","gitlab"], "leverCompanies": ["ramp"], "keywords": ["data"] }
{ "countries": ["France"], "locationType": "remote", "previousDatasetId": "<PREV_DATASET_ID>" }
Output
1) Internships (default dataset — active, ranked by relevance)
{"id": "3f9a1c22b7e04d18","jobTitle": "Data Science Internship (m/f/d)","company": "Example GmbH","country": "Germany", "city": "Berlin","locationType": "hybrid","industry": "Data Science", "department": "Data","internshipType": "internship", "duration": "6 months","salary": null,"requiredSkills": ["python","sql","machine learning"],"educationRequirements": "Bachelor","experienceRequirements": null,"languageRequirements": ["English","German"],"applicationDeadline": null,"postingDate": "2026-08-20T00:00:00Z","sourceWebsite": "themuse.com", "source": "themuse","sources": ["themuse","arbeitnow"],"sourceUrls": [{ "source":"themuse","url":"https://..." }],"url": "https://...", "companyUrl": null,"description": "…","relevanceScore": 82,"relevanceReasons": ["country match","role match","keywords: python"],"classifications": ["new","high-match"],"status": "active","collectedAt": "2026-08-30T18:00:00Z","lastVerifiedAt": "2026-08-30T18:00:00Z"}
2) Changes (named dataset changes)
{ "id":"3f9a1c22b7e04d18", "changeType":"new", "jobTitle":"…", "company":"…", "detectedAt":"…" }
changeType ∈ new · expired · deadline-changed · updated. Run summary is in key-value store OUTPUT.
Relevance score & classifications
Base 40 (already a validated internship) + country/city/role/keyword/language/location-type matches + freshness + multi-source corroboration → 0–100. Classifications: new (≤7d), deadline-soon (≤14d), remote, high-match (≥75), likely-expired (deadline passed or >90d old). Likely-expired listings are kept out of the active dataset but still surface in changes for historical tracking.
Scheduling & history
Schedule daily (or several times/day) and pass the previous run's dataset ID as previousDatasetId. Each run emits new/expired/deadline-changed/updated events, so you can maintain a live + historical view.
Website / database
db/schema.sql is a ready PostgreSQL schema with proper indexes (country, city, company, industry, location_type, deadline, posting_date, relevance, GIN on skills/languages/classifications) plus internship_sources, internship_changes, and saved_searches (alerts). Load the default dataset into internships (upsert on id, pattern included in the SQL) and the changes dataset into internship_changes. The website then queries/filter/paginates against these tables. The website + query API is a separate build from this Actor.
Reliability
Per-source fail-safe (one dead source never stops the run), retries with backoff, concurrency across sources, HTML→text normalization, and deterministic ids for stable dedup/upsert.
Limitations
- Internship detection is keyword/heuristic (multi-language: EN/DE/FR/ES/IT/NL/PT/PL) — very accurate on explicit sources, best-effort on free-text boards.
- Country/city are parsed from location strings via a curated hint list (extend
COUNTRY_HINTSinnormalize.js). - Deadlines exist mainly on Greenhouse; other sources rarely publish them.
- LinkedIn/Indeed are out of scope by design (ToS/anti-bot).