尚未检测到更新。GitHub 发布版本后会显示在这里。
Swedish public procurement aggregator — Mercell + TED EU, scraping svenska upphandlingar till en SQLite, serverad via FastAPI + Easypanel.
翻译准备中
正在加载完整 README。
查看完整 README ↗Svenska upphandlingar — fri tillgång, en SQLite, en container. Open by design. Data är dina medborgares rättighet.
Agentanbud samlar in offentlig upphandlingsdata från Mercell och TED EU,
lagrar allt i en lokal SQLite, och serverar den via webb-dashboard, öppet
JSON-API och en MCP-server för AI-agenter — allt från en FastAPI-app.
Ovanpå datan finns marknadsintelligens (get_winner_history — vem brukar
vinna), en agent-författad blogg och en cookie-fri analytics-sida. Allt-i-ett-
container, deployas till Easypanel via en docker-compose.yml. Inga
molntjänster, inga API-nycklar för läsning, inga paywalls.
Varför det här finns: Svenska myndigheter måste enligt lag publicera upphandlingar enligt offentlighetsprincipen, men det finns ingen samlad publik tjänst som gör datan lätt att upptäcka, jämföra och bevaka. Vi tycker att medborgare, småföretagare och ideella organisationer förtjänar samma tillgång som de stora konsultbolagen.
Svenska myndigheter måste enligt lag publicera upphandlingar enligt offentlighetsprincipen — men det finns ingen samlad öppen plats där datan är lätt att hitta, jämföra och bevaka. Stora konsultbolag har råd att betala plattformar, byta källa, skriva anbud. Småföretag gör det inte.
Agentanbuds syfte: göra det enklare för svenska företag — särskilt småföretag — att hitta och offerera offentliga upphandlingar. Öppna data, öppen kod, öppen matchning. Inte för att konkurrera med plattformarna, utan för att hjälpa marknaden fungera bättre.
Konkret: vi speglar publik upphandlingsdata, gör den sökbar, och ger AI-agenter direktåtkomst via MCP — så att småföretag har samma möjlighet att hitta anbud som de stora har.
"Sharing is caring" — men vi tar det längre: vi delar hela ekosystemet (kod, data, utbildning) så att fler kan bygga bättre verktyg ovanpå.
Respekt före aggresion: vi respekterar robots.txt. Vi kontaktar plattformar istället för att kringgå dem. Vi speglar bara det som plattformarna själva publicerat publikt. Om en plattform säger nej, säger vi också nej (e-Avrop är vårt första exempel — se /providers).
cp.┌─────────────────────────────────────────────┐
│ Easypanel service: agentanbud │
│ (single container via docker-compose) │
│ │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ cron 06:00 │ │ FastAPI (uvicorn) │ │
│ │ ↓ │ │ /api/* (REST) │ │
│ │ scraper │ │ /mcp (agenter) │ │
│ │ • mercell │ │ /api/winners │ │
│ │ • ted ×3 │ │ / (dashboard) │ │
│ │ • lov │──│ reads ────→ SQLite │ │
│ │ • kunskap │ │ │ │
│ └──────────────┘ └──────────────────────┘ │
│ ↳ /data/application.db │
└─────────────────────────────────────────────┘
↕ HTTPS
Traefik (Easypanel)
Inga Supabase-konton, inga externa databaser, inga buildpacks, inga hemligheter att hantera. Allt-i-ett, läs SQLite direkt om du vill.
https://github.com/magnusfroste/agentanbudupphandling.dindomän.se (HTTPS auto)Klart. Första sync körs kl 06:00 (eller ställ in egen CRON_SCHEDULE).
git clone https://github.com/magnusfroste/agentanbud.git
cd agentanbud
docker compose up --build
# → http://localhost:8080
För att köra en synk manuellt (utan att vänta på cron):
docker compose exec app python -m scraper.orchestrator
Kör efter varje deploy — 42 kontroller, inga beroenden utöver Python:
python3 scripts/smoke_test.py # mot produktion
python3 scripts/smoke_test.py --wait 180 # vänta in omstarten först
python3 scripts/smoke_test.py --base http://localhost:8080
Avslutar med kod 0 (allt grönt) eller 1 (något fel), så det kan gate:a en deploy. Det kontrollerar bl.a. saker som faktiskt gått sönder i drift:
ADMIN_API_KEY, eftersom sonderna då
skulle utlösa en riktig synkAlla inställningar är miljövariabler — se .env.example för
hela listan. De viktigaste för självhostande:
| Variabel | Standard | Vad |
|---|---|---|
DB_PATH | /data/application.db | SQLite-sökväg (Docker-volym) |
CRON_SCHEDULE | 0 6 * * * | När daglig synk körs |
ADMIN_API_KEY | (tom) | Skydd för skriv-/adminåtgärder — sätt den i produktion |
ALLOW_OPEN_ADMIN | (tom) | Öppnar skrivning utan nyckel — endast lokal dev |
SCRAPE_MERCELL, SCRAPE_TED, … | true | Slå av/på enskilda källor |
USER_AGENT | agentanbud/0.1 … | Skickas till Mercell/TED (artig, med kontakt) |
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗