This article is only available in Swedish.

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.

June 12, 20269 min läsning

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.

Skapa en kopia i Sheets

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.

Dataströmmens tre steg:
1. BörsAPI REST APIStandardiserade rapporter (RR, BR, KA), TTM och insynsdata i JSON.
2. Apps Script + CacheScriptet cachen-lagrar svar i 6 timmar för snabb beräkning.
3. Sheets Formler=BORSAPI(...) kombineras med GOOGLEFINANCE() för nyckeltal.

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.

  1. Öppna ditt Google Sheet, klicka på menyvalet Tillägg (Extensions)Apps Script.
  2. Klistra in koden nedan och ersätt DIN_API_NYCKEL_HÄR med din personliga API-nyckel från din BörsAPI Dashboard.
  3. 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.

Språk / Separator:
Genererad Formel (klistra in i din Google Sheets-cell)
Separator: ;
=BORSAPI("SE0000115446"; "2024"; "revenue")
Exempel på hur du bygger nyckeltal direkt i Sheets:
Rörelsemarginal (EBIT-marginal):

Dividera Rörelseresultat med Nettoomsättning

=BORSAPI("SE0000115446"; "2024"; "operating_income") / BORSAPI("SE0000115446"; "2024"; "revenue")
Soliditet (%):

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:

KategoriFältnamn (field)BeskrivningTecken / Enhet
RRrevenueNettoomsättning / RörelseintäkterPositivt (+)
RRoperating_incomeRörelseresultat (EBIT)Positivt/Negativt
RRnet_incomeNettoresultat (Årets/periodens resultat)Positivt/Negativt
RRepsVinst per aktie (Earnings Per Share)Kronor per aktie
BRtotal_assetsTotala tillgångar (Balansomslutning)Positivt (+)
BRtotal_equityTotalt eget kapitalPositivt (+)
BRtotal_liabilitiesTotala skulderPositivt (+)
KAoperating_cash_flowKassaflöde från den löpande verksamhetenPositivt/Negativt
KAfree_cash_flowFritt 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)

Varför får jag felmeddelandet `#ERROR!` eller formelfel?

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 (,).

Varför visas "HTTP Fel 401" eller "API-fel"?

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.

Hur ofta uppdateras min data i Google Sheets?

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.

1. Skapa konto

Registrera dig på några sekunder via registreringssidan.

2. Generera API-nyckel

Gå till din Dashboard och klicka på "Generera API-nyckel".

3. Anslut i mallen

Ersätt placeholder-nyckeln i källkoden eller kalkylarket med din personliga nyckel.

    Importera finansiell data till Google Sheets automatiskt - BörsAPI.se