Importera finansiell data till Google Sheets automatiskt
En komplett guide till hur du använder Google Apps Script med inbyggd caching för att automatiskt strömma rapporter, TTM-värden, nyckeltal och insynsdata till dina kalkylark.
Google Sheets är ett av marknadens mest mångsidiga verktyg för att bygga kundanpassade aktieportföljer och värderingsmodeller. Med hjällp av Google Apps Script och BörsAPI.se kan du strömma färska, standardiserade finansiella rapporter direkt till dina kalkylark – helt utan manuell datainmatning.
Färdig Google Sheets-mall
Klicka nedan för att skapa din egen kopia av vår officiella portfölj- och analysmall i Google Drive.
Arkitektur: Hur integrationen fungerar
Istället för att manuellt klippa och klistra siffror från PDF-rapporter ansluter Google Sheets direkt mot BörsAPI via en anpassad formel (Custom Function) skriven i Google Apps Script.
Steg 1: Installera Apps Script med Caching (Rekommenderat)
Eftersom BörsAPI kräver en säkerhetstoken (Bearer token) och vi vill undvika att Google Sheets gör hundratals redundanta API-anrop vid varje celländring använder vi Google Apps Script med inbyggd CacheService.
- Öppna ditt Google Sheet, klicka på menyvalet Tillägg (Extensions) → Apps Script.
- Klistra in koden nedan och ersätt
DIN_API_NYCKEL_HÄRmed din personliga API-nyckel från din BörsAPI Dashboard. - Klicka på Spara (Ctrl+S / Cmd+S) och stäng Apps Script-fliken.
/**
* BörsAPI.se - Officiell Google Sheets-integration med CacheService
*
* Användning i celler:
* Svenska Sheets (semikolon): =BORSAPI("SE0011166610"; "2024"; "revenue")
* Engelska Sheets (komma): =BORSAPI("SE0011166610", "2024", "revenue")
*/
const BORSAPI_KEY = "DIN_API_NYCKEL_HÄR"; // Ersätt med din nyckel från borsapi.se/dashboard
const CACHE_TTL_SECONDS = 21600; // Cacha svar i 6 timmar (21 600 s)
/**
* Hämtar ett specifikt finansiellt fält från BörsAPI för ett bolag och en period.
*
* @param {string} isin Bolagets ISIN-kod (t.ex. "SE0011166610")
* @param {string} period Period (t.ex. "2024", "2025-Q1 TTM", "2024-Q3", "latest")
* @param {string} field Rapportfält (t.ex. "revenue", "operating_income", "net_income")
* @return {number|string} Finansiellt värde i rå form
* @customfunction
*/
function BORSAPI(isin, period, field) {
if (!isin || !period || !field) {
return "Fel: Ange isin, period och field";
}
const cacheKey = "borsapi_" + isin.trim() + "_" + period.trim() + "_" + field.trim();
const cache = CacheService.getScriptCache();
const cachedVal = cache.get(cacheKey);
if (cachedVal !== null) {
return isNaN(cachedVal) ? cachedVal : Number(cachedVal);
}
const url = "https://borsapi.se/api/v1/companies/" + isin.trim() + "/reports/" + period.trim();
const options = {
"method": "GET",
"headers": {
"Authorization": "Bearer " + BORSAPI_KEY,
"Accept": "application/json"
},
"muteHttpExceptions": true
};
try {
const response = UrlFetchApp.fetch(url, options);
const code = response.getResponseCode();
if (code !== 200) {
return "HTTP Fel " + code;
}
const json = JSON.parse(response.getContentText());
if (json.error) {
return "API-fel: " + json.error;
}
const val = json[field.trim()];
if (val === undefined || val === null) {
return "Fält saknas";
}
// Lagra i cache
cache.put(cacheKey, String(val), CACHE_TTL_SECONDS);
return typeof val === "number" ? val : val;
} catch (e) {
return "Nätverksfel: " + e.toString();
}
}
/**
* Hämtar senaste insynstransaktioner för ett bolag.
* @param {string} isin Bolagets ISIN-kod
* @return {string} Sammanfattning av senaste köp/sälj
* @customfunction
*/
function BORSAPI_INSIDER(isin) {
if (!isin) return "Fel: Ange ISIN";
const url = "https://borsapi.se/api/v1/companies/" + isin.trim() + "/insider-statistics";
const options = {
"headers": { "Authorization": "Bearer " + BORSAPI_KEY },
"muteHttpExceptions": true
};
try {
const res = UrlFetchApp.fetch(url, options);
const data = JSON.parse(res.getContentText());
if (!data || data.error) return "Ingen insynsdata";
return "Nettoköp 90d: " + (data.net_buy_amount_90d ? data.net_buy_amount_90d.toLocaleString() + " SEK" : "0 SEK");
} catch(e) {
return "Fel";
}
}Steg 2: Testa den interaktiva formelbyggaren
Använd verktyget nedan för att välja bolag, period och fält. Klicka på kopiera för att klistra in formeln direkt i din kalkylcell!
Interaktiv Google Sheets Formelbyggare
Välj parametrar nedan för att generera den exakta formeln för ditt kalkylark.
=BORSAPI("SE0000115446"; "2024"; "revenue")Dividera Rörelseresultat med Nettoomsättning
=BORSAPI("SE0000115446"; "2024"; "operating_income") / BORSAPI("SE0000115446"; "2024"; "revenue")Dividera Eget Kapital med Totala Tillgångar
=BORSAPI("SE0000115446"; "2024"; "total_equity") / BORSAPI("SE0000115446"; "2024"; "total_assets")Steg 3: Fält- och Periodreferens
BörsAPI returnerar standardiserade siffror i kronor/enheter. Nedan ser du de vanligaste tillgängliga fälten:
| Kategori | Fältnamn (field) | Beskrivning | Tecken / Enhet |
|---|---|---|---|
| RR | revenue | Nettoomsättning / Rörelseintäkter | Positivt (+) |
| RR | operating_income | Rörelseresultat (EBIT) | Positivt/Negativt |
| RR | net_income | Nettoresultat (Årets/periodens resultat) | Positivt/Negativt |
| RR | eps | Vinst per aktie (Earnings Per Share) | Kronor per aktie |
| BR | total_assets | Totala tillgångar (Balansomslutning) | Positivt (+) |
| BR | total_equity | Totalt eget kapital | Positivt (+) |
| BR | total_liabilities | Totala skulder | Positivt (+) |
| KA | operating_cash_flow | Kassaflöde från den löpande verksamheten | Positivt/Negativt |
| KA | free_cash_flow | Fritt kassaflöde (FCF) | Positivt/Negativt |
Steg 4: Beräkna Nyckeltal direkt i Kalkylarket
Eftersom BörsAPI levererar råa, verifierbara rapportuppgifter bygger du enkelt dina egna finansiella nyckeltal genom standardformler i Sheets.
1. Rörelsemarginal (EBIT-marginal)
Visar hur stor andel av omsättningen som blir kvar som rörelsevinst.
=BORSAPI('SE0000115446'; '2024'; 'operating_income') / BORSAPI('SE0000115446'; '2024'; 'revenue')Formatera cellen som Procent (%).
2. Avkastning på Eget Kapital (ROE)
Ett av de viktigaste lönsamhetsmåtten för aktieägare.
=BORSAPI('SE0011166610'; '2024'; 'net_income') / BORSAPI('SE0011166610'; '2024'; 'total_equity')3. Soliditet (Finansiell Styrka)
Visar hur stor del av bolagets tillgångar som finansieras med eget kapital.
=BORSAPI('SE0000106270'; '2024'; 'total_equity') / BORSAPI('SE0000106270'; '2024'; 'total_assets')4. Realtids-P/E-tal (Kombinerat med GOOGLEFINANCE)
Hämta realtidskursen via Google Finance och dividera med BörsAPI:s TTM-vinst per aktie!
=GOOGLEFINANCE('STO:VOLV-B'; 'price') / BORSAPI('SE0000115446'; '2025-Q1 TTM'; 'eps')Steg 5: Avancerad DuPont-analys i Sheets
DuPont-modellen bryter ner Avkastningen på Eget Kapital (ROE) i tre delkomponenter:
ROE = Vinstmarginal × Kapitalomsättningshastighet × Finansiell hävstång
- Vinstmarginal:
=Nettoresultat / Omsättning - Kapitalomsättningshastighet:
=Omsättning / Totala Tillgångar - Finansiell hävstång:
=Totala Tillgångar / Eget Kapital
Steg 6: Felsökningsguide (Troubleshooting FAQ)
Om ditt Google Sheets är inställt på svenska måste du använda semikolon (;) för att skilja argumenten åt i formeln. Om ditt Google Sheets är på engelska använder du komma (,).
Detta beror på att du inte har ersatt DIN_API_NYCKEL_HÄR i Apps Script med din riktiga API-nyckel från BörsAPI Dashboard.
Vårt Apps Script cachar svar lokalt i 6 timmar med CacheService. Om du vill tvinga fram en direkt omräkning kan du tillfälligt ändra period-parametern eller rensa cachen i Apps Script-editorn.
Kom igång med BörsAPI
För att använda dessa mallar och skript behöver du ett personligt konto och en API-nyckel. Det är helt kostnadsfritt under vår beta-period.
Registrera dig på några sekunder via registreringssidan.
Gå till din Dashboard och klicka på "Generera API-nyckel".
Ersätt placeholder-nyckeln i källkoden eller kalkylarket med din personliga nyckel.