Zum Inhalt springen

Berichte, Kosten und Export

Wie bringe ich meine Zahlen in Google Sheets?

Mit einem kurzen Apps Script, das jeden Morgen deine Tageszeilen je Kanal und Kampagne über die Lese-Schnittstelle holt und ein Blatt neu füllt. Den Lese-Schlüssel legst du in den Skripteigenschaften ab, nicht im Code und nicht in einer Formel. Die Lese-Schnittstelle gehört zu Growth, Scale und dem Agenturtarif.

Kann ich meine Zahlen in eine Google-Tabelle holen, die sich jeden Tag selbst aktualisiert?

Eine Formel in Google Sheets kann deine Zahlen nicht selbst abholen: Die Lese-Schnittstelle verlangt den Schlüssel im Kopf der Anfrage, und den setzt keine Formel. Das übernimmt ein kurzes Skript in Apps Script, der Skriptumgebung, die zu jeder Google-Tabelle gehört. Es holt jeden Morgen die Tageszeilen deines Kontos und schreibt sie in ein Blatt namens „Metrunio“. Pivot-Tabellen und Diagramme, die auf diesem Blatt aufbauen, zeigen danach die neuen Zahlen.

So richtest du es ein

  1. 01Leg im Portal unter „Exporte & KI-Verbindungen“ bei „API-Zugang“ einen Lese-Schlüssel an, am besten einen eigenen nur für diese Tabelle. Er wird nur einmal vollständig angezeigt.
  2. 02Öffne die Tabelle und wähle „Erweiterungen > Apps Script“. Ersetze den Inhalt von Code.gs durch die Vorlage unten und speichere.
  3. 03Öffne links die „Projekteinstellungen“ und füge unter „Skripteigenschaften“ die Eigenschaft METRUNIO_READ_KEY hinzu, mit deinem Schlüssel als Wert.
  4. 04Wähle oben die Funktion installDailyTrigger und klicke auf „Ausführen“. Beim ersten Mal fragt Google nach deiner Zustimmung: Das Skript will Tabellen bearbeiten, eine externe Adresse abrufen und täglich laufen, auch wenn du nicht angemeldet bist. Meldet Google, die App sei nicht überprüft: Es ist dein eigenes Skript, und über „Erweitert“ geht es weiter.
  5. 05Danach steht das Blatt „Metrunio“ da, und der Auslöser füllt es jeden Morgen zwischen 6 und 7 Uhr neu.

Die Vorlage

// Metrunio: Tageszeilen je Kanal und Kampagne im Blatt „Metrunio“.
// Den Lese-Schlüssel trägst du in den Projekteinstellungen unter
// „Skripteigenschaften“ als METRUNIO_READ_KEY ein, nie hier im Code.
const API_URL = 'https://api.metrunio.com/v1/data/daily';
const SHEET_NAME = 'Metrunio';
const COLUMNS = [
  ['day', 'Tag'],
  ['channelName', 'Kanal'],
  ['campaignName', 'Kampagne'],
  ['attributedConversions', 'Zugeordnete Conversions'],
  ['attributedRevenue', 'Zugeordneter Umsatz'],
  ['postViewConversions', 'Post-View-Conversions'],
  ['unattributedConversions', 'Nicht zugeordnete Conversions'],
  ['unattributedRevenue', 'Nicht zugeordneter Umsatz'],
  ['clicks', 'Klicks'],
  ['impressions', 'Impressionen'],
  ['viewableImpressions', 'Sichtbare Impressionen'],
  ['cost', 'Kosten'],
];

// Holt die Zahlen und schreibt das Blatt neu. Der Auslöser ruft das jeden Morgen auf.
function updateMetrunio() {
  const key = PropertiesService.getScriptProperties().getProperty('METRUNIO_READ_KEY');
  if (!key) throw new Error('Die Skripteigenschaft METRUNIO_READ_KEY fehlt.');

  const response = UrlFetchApp.fetch(API_URL, {
    headers: { Authorization: 'Bearer ' + key, 'Accept-Language': 'de' },
    muteHttpExceptions: true,
  });
  const body = response.getContentText();
  if (response.getResponseCode() !== 200) {
    throw new Error('Metrunio ' + response.getResponseCode() + ': ' + errorMessage(body));
  }

  const values = [COLUMNS.map((column) => column[1])];
  for (const row of JSON.parse(body).data) {
    values.push(COLUMNS.map((column) => cell(row[column[0]])));
  }
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName(SHEET_NAME) || spreadsheet.insertSheet(SHEET_NAME);
  sheet.clearContents();
  sheet.getRange(1, 1, values.length, COLUMNS.length).setValues(values);
}

// Leere Kosten bleiben leer: keine Kosten erfasst, nicht null Euro.
// Ein Name, der mit =, +, - oder @ beginnt, bleibt Text und wird keine Formel.
function cell(value) {
  if (value === null || value === undefined) return '';
  if (typeof value === 'string' && /^[=+@-]/.test(value)) return "'" + value;
  return value;
}

// Die Meldung der Schnittstelle, in der Sprache aus Accept-Language.
function errorMessage(body) {
  try {
    const error = JSON.parse(body).error;
    return [error.message].concat(error.resolution || []).join(' ');
  } catch (parseError) {
    return body.slice(0, 300);
  }
}

// Einmal ausführen: legt den täglichen Lauf zwischen 6 und 7 Uhr an und füllt das Blatt sofort.
function installDailyTrigger() {
  for (const trigger of ScriptApp.getProjectTriggers()) {
    if (trigger.getHandlerFunction() === 'updateMetrunio') ScriptApp.deleteTrigger(trigger);
  }
  ScriptApp.newTrigger('updateMetrunio').timeBased().everyDays(1).atHour(6).create();
  updateMetrunio();
}

Was im Blatt steht

Eine Zeile je Tag, Kanal und Kampagne für die letzten 30 Tage bis einschließlich heute, gezählt in der Zeitzone deines Kontos. Den heutigen Tag enthält das Blatt erst nach dem Lauf am nächsten Morgen vollständig. Zugeordnete Conversions und zugeordneter Umsatz folgen dem Standardmodell deines Kontos, wie die Berichte; Klicks und Impressionen sind gemessen.

Bleibt eine Zelle bei den Kosten leer, sind für diese Zeile keine Kosten erfasst. Das ist nicht dasselbe wie null Euro. Nicht zugeordnete Conversions stehen in der Zeile ohne Kanal und Kampagne, und die Summen je Kanal sind dieselben wie unter „Kanäle & Attribution“.

Anpassen

  • Spalten: Die Liste COLUMNS legt Reihenfolge und Überschriften fest. Streich, was du nicht brauchst. Die Schnittstelle liefert außerdem die Kennungen von Kanal und Kampagne (channelId, campaignId) und den zugeordneten Akquisitionswert (attributedSetValue). Das ist der Wert, den du einer Conversion selbst gegeben hast, kein Umsatz.
  • Zeitraum: Häng an API_URL zum Beispiel ?from=2026-01-01 an. Ohne Ende reicht der Zeitraum bis heute. Eine Abfrage liefert höchstens 50.000 Zeilen; braucht sie mehr, sagt die Schnittstelle ab, statt Zeilen wegzulassen, und ein kürzerer Zeitraum hilft.
  • Modell: Mit ?model=linear rechnet die Schnittstelle in einem festen Modell statt im Standardmodell deines Kontos. Zwei Angaben verbindest du mit &, etwa ?from=2026-01-01&model=linear.

Schlägt ein Lauf fehl, etwa weil der Schlüssel widerrufen oder abgelaufen ist, schickt Google dir eine Mail mit der Meldung von Metrunio. Das Blatt behält dann den Stand des letzten erfolgreichen Laufs.

Warum nicht IMPORTDATA?

IMPORTDATA holt eine Adresse, schickt aber keinen Kopf mit. Der Schlüssel müsste deshalb in der Adresse stehen und damit in einer Formel, die jede Person lesen kann, der du die Tabelle zeigst. Die Lese-Schnittstelle nimmt den Schlüssel ohnehin nur im Kopf der Anfrage an.

Achtung

Der Schlüssel steht in keiner Zelle und in keiner Formel. Wer die Tabelle bearbeiten darf, kann aber das Skript öffnen und ihn in den Skripteigenschaften lesen. Gib die Tabelle deshalb nur Personen zum Bearbeiten, die den Schlüssel kennen dürfen, und zieh ihn unter „Exporte & KI-Verbindungen“ zurück, wenn jemand das Team verlässt.

Hinweis

Die Zahlen gehen von Metrunio zu Google, weil du sie dort ansehen willst, und Google verarbeitet sie nach den Bedingungen deines Google-Kontos. Die Zeilen sind Summen je Tag, Kanal und Kampagne und enthalten keine Kennungen einzelner Personen. Ziehst du den Schlüssel zurück, holt das Skript nichts mehr; was schon in der Tabelle steht, bleibt dort, bis du es löschst.

Zuletzt geprüft am 15.10.2026

Ebenfalls gefragt

  • Google Sheets verbinden
  • Metrunio in Google Tabellen
  • Gibt es eine Vorlage für Google Sheets?
  • Wie aktualisiert sich eine Tabelle automatisch mit meinen Zahlen?
  • Geht das mit IMPORTDATA?
  • Wo lege ich den Schlüssel in Apps Script ab?

Weiterführende Artikel

  • Wie bringe ich meine Zahlen in Power BI oder Excel?

    Kann ich meine Zahlen in Power BI oder Excel laden und dort aktualisieren?

    Mit einer Power-Query-Abfrage, die deine Tageszeilen je Kanal und Kampagne über die Lese-Schnittstelle lädt; Power BI und Excel verstehen dieselbe Abfrage. Den Lese-Schlüssel legst du als Parameter an, und die Abfrage schickt ihn im Kopf der Anfrage, nie in der Adresse. Die Lese-Schnittstelle gehört zu Growth, Scale und dem Agenturtarif.

  • Wie exportiere ich Daten?

    Kann ich die Zahlen selbst nachrechnen?

    Unter „Exporte & KI-Verbindungen“ lädst du CSV-Dateien für Conversions, Customer Journeys und die Attribution nach Kanal herunter, mit denselben Werten, die die Berichte anzeigen; damit rechnest du sie selbst nach. Conversions und Journeys stehen darin einzeln, Zeile für Zeile, und jede Zeile nennt Zeitraum, Umgebung und Datenstand.

  • Wie schließe ich mein eigenes KI-Werkzeug an?

    Gibt es einen MCP-Server für Metrunio?

    Über den MCP-Server von Metrunio. Er stellt dieselben Lesewerkzeuge bereit wie der Chat im Portal. Claude und ChatGPT melden sich über OAuth an: Du gibst im Portal frei, welches Konto sie lesen. Andere Werkzeuge verwenden einen API-Schlüssel im Bereich „read“, denselben, den auch ein Skript für /v1/data verwenden würde.

  • Wie rotiere oder widerrufe ich einen Schlüssel?

    Was tue ich, wenn ein Schlüssel versehentlich veröffentlicht worden ist?

    Schreibschlüssel und Serverschlüssel erneuerst du in der Einrichtung, den Serverschlüssel im Reiter „Server Events API“, wo du ihn auch widerrufst. Lese-Schlüssel widerrufst du unter „Exporte & KI-Verbindungen“ im Abschnitt „API-Zugang“ und legst dort einen neuen an. Ein neuer Schlüssel steht nur einmal vollständig da, und der alte gilt sofort nicht mehr.

  • Wann beginnt ein Tag in den Berichten?

    In welcher Zeitzone rechnen Berichte, Chat und Schnittstellen?

    Ein Tag läuft von Mitternacht bis Mitternacht in der Zeitzone deines Kontos; voreingestellt ist Europe/Berlin, ändern lässt sie sich unter „Einstellungen“. „Die letzten 7 Tage“ sind sieben ganze Kalendertage einschließlich heute, und ein frei gewählter Zeitraum schließt seinen letzten Tag ganz ein. Dieselbe Regel gilt für Übersicht, Berichte, Kosten, den Chat, den MCP-Server und die Lese-Schnittstelle.

  • Wie rechnen die Attributionsmodelle?

    Welche Modelle gibt es und wie verteilen sie den Anteil?

    Es gibt sieben Modelle: Sechs verteilen eine Conversion nach einer festen, offengelegten Regel, das siebte liest die Regel aus deinen eigenen Wegen ab. Findet ein Modell passende Kontakte, verteilt es den Wert der Conversion vollständig auf sie; findet es keinen, bleibt sie „nicht zugeordnet“ und steht getrennt. Zugeordnet und nicht zugeordnet ergeben zusammen alle Conversions, die es rechnet.

Sieh, was deine Daten erzählen.

Erst in der Demo umsehen. Ein eigenes Konto gibt es derzeit nur auf Einladung.

Demo öffnenZugang anfragen