Providers
Vi är transparenta: det här är datakällorna vi crawlar, hur vi når dem, och deras nuvarande status.
Alla svenska upphandlingar måste enligt lag publiceras enligt offentlighetsprincipen, men plattformarna som samlar in dem äger sina egna API:er och sina egna villkor. Vi speglar bara det som är publikt tillgängligt och länkar alltid tillbaka till originalannonsen via tender_url — vi är aldrig den slutgiltiga källan.
Aktiva providers
- Beskrivning
- Svensk upphandlingsplattform som speglar Tendsign, e-Avrop, Kommersannons, TED och andra. Levererar ~65-70% av svensk volym via ett öppet, oautentiserat JSON-API.
- Metod
REST GET(oautentiserat, polite user-agent)- URL-mönster
https://search-service-api.discover.app.mercell.com/public/api/v1/search- Auth
- Nej
Tekniska detaljer
GET /public/api/v1/search?page=N&pageSize=100
Returns paginated JSON. Filter syntax is lossy — we walk pages
and dedupe on (source_system, source_id). ~525 SE records / 100 pages / 80s.
Headers: User-Agent (polite), Accept: application/json.
No API key required.
- Beskrivning
- EU-kommissionens officiella databas för upphandlingar över EU-tröskelvärden. Vi filtrerar på Sverige (buyer-country=SWE) och hämtar öppna upphandlingar (notice-subtype 7, 29). Svarar på frågan: "Vad kan jag lägga anbud på?"
- Metod
REST POST(JSON body med query + fields + filters)- URL-mönster
https://api.ted.europa.eu/v3/notices/search- Auth
- Nej
Tekniska detaljer
POST /v3/notices/search
Body: {"query": "buyer-country = SWE AND publication-date >= 20260101",
"fields": [...], "limit": 100, "page": 1}
Returns notice metadata. Only covers EU-threshold procurements,
not all Swedish tenders. Polite User-Agent required.
- Beskrivning
- Tilldelningsbeslut från TED — visar VILKA kontrakt som redan har tilldelats, till vem och till vilket värde. Marknadsintelligence för småföretag: "Vem vann senast?" notice-subtypes 16–19 (standard, sectoral, concessions, defence).
- Metod
REST POST(samma API som ted, annan subtype-filter)- URL-mönster
https://api.ted.europa.eu/v3/notices/search- Auth
- Nej
Tekniska detaljer
POST /v3/notices/search
Body: {"query": "buyer-country = SWE AND notice-subtype = \"16\" OR \"17\" ...",
"fields": ["winner-name", "result-value-lot", ...]}
Winner fields are requested but often empty in search results —
full data lives in the notice XML body. ~18k SWE awards/year.
- Beskrivning
- Förhandsinformation om kommande upphandlingar. Myndigheter meddelar att de PLANERAR att upphandla — innan formell annons publiceras. Tidigast möjliga signal för småföretag att förbereda sig. notice-subtypes 4, 5, 25, 26.
- Metod
REST POST(samma API, subtype-filter för PIN)- URL-mönster
https://api.ted.europa.eu/v3/notices/search- Auth
- Nej
Tekniska detaljer
POST /v3/notices/search
Body: {"query": "buyer-country = SWE AND notice-subtype = \"4\" OR \"5\" ...",
"fields": ["estimated-value-lot", "future-notice", ...]}
~1k SWE PINs/year. Low volume but high strategic value.
Planerade providers
Kända plattformar vi vill spegla men som kräver mer jobb (vanligtvis: inloggning, headless browser, eller mer komplex HTML-scraping).
Plattform för svenska upphandlingar från kommuner och myndigheter. Inget publikt API. Scraping kräver Selenium + headless browser. Referens: yuril93/tendsign.com-scraping (Selenium, 2019 — kan behöva uppdateras).
Vi respekterar e-Avrops robots.txt (Disallow: /). De har gjort ett aktivt val att blockera crawling. Det är deras rätt — plattformen äger sin data, även om underliggande upphandlingar är offentliga handlingar.
Om du vill ha e-Avrop-data: gå direkt till e-Avrop eller använd Mercell som speglar den mesta av e-Avrops data ändå.
Det här är ett medvetet val: vi tror att öppna data byggs bäst genom samarbete, inte konfrontation.
AI-driven upphandlingsplattform. Backend (api.clira.io) är Sanctum-skyddat och kräver inloggning. Offentlig annonsvisning finns på public.clira.io men data är client-side-renderad. Möjlig lösning: konto + scraping, eller headless browser.
Stor svensk plattform. Mercell speglar den mesta datan men inte allt. Vanlig HTTP-scraping mot www.e-avrop.com/e-Upphandling/ är möjligt. Referens: Magto/upphandling-matcher (server/scraper/eavrop.py).
Samlar flera kommuners upphandlingar. Inget publikt API. Innehåll är delvis JS-renderat. Möjlig men inte trivial scraping.
Myndigheter och kommuner kör ofta sina egna upphandlingssystem. Vissa är i Mercell, andra inte. Hög arbetsinsats, låg marginal per sajt.
Ekosystem — andra verktyg som hjälper svenska företag
OpenTender är en spegel. Det finns andra verktyg som gör kompletterande saker. Hela kedjan behövs för att småföretag ska kunna navigera offentlig upphandling utan att anlita konsulter.
Sveriges myndighet för upphandlingsstöd. Lagar, vägledning, hållbarhetskriterier, verktyg för annonsering. Den formella källan.
Fokus på insikt: vem upphandlar vad, hur stor är din marknad, hur matchar du rätt anbud. Plus kunskapsbank, mallar och personlig coachning. Bästa platsen att börja om du är ett småföretag som vill offerera.
Alla EU-tröskelvärden. Den ursprungliga datakällan vi speglar för svenska notiser. Rättsligt bindande publiceringskanal.
MCP-server som ger Claude Code / Kilo Code direktåtkomst till svensk upphandlingsdata från Upphandlingsmyndigheten + TED. Vår syskon.
Samma problem som vi löser: Mercell + e-Avrop scraper, Hetzner-deploy, FastAPI. Referens-implementation vi lärde oss från.
De som faktiskt driver marknaden. Mercell, Tendsign (Visma), e-Avrop, Clira, Kommersannons. Vi speglar där de tillåter, vi rekommenderar att gå direkt till dem för anbud.
Vår roll: inte konkurrent — komplement
Vi gör inte ansökningarna enklare. Det gör PublicInsight. Vi gör inte reglerna tydligare. Det gör Upphandlingsmyndigheten. Vi är bara en öppen spegel som gör det enklare att upptäcka vad som faktiskt publiceras.
Om du är en utvecklare som vill bygga något bättre: fork this repo. Vår kod är MIT-licensierad. Våra scrapers är skrivna för att vara lätta att porta, modifiera och förbättra. Använd det vi byggt, eller bygg om det från grunden — vi hejar på båda.
Om du representerar en plattform (Mercell, Tendsign, e-Avrop, Clira) och vill diskutera öppna API:er, datadelning eller samarbete: öppna en issue eller kontakta oss.
Bidra
Saknar du en provider? Öppna en issue eller PR på GitHub. Varje ny källa är ungefär 150–300 rader Python + registrering i scraper/orchestrator.py.