DokuLemon Squeezy

03 · Umsatz

Lemon Squeezy verbinden und seine Bestellungen mit Besuchen verknüpfen

Tally liest die Bestellungen und Abo-Rechnungen deines Shops und legt einen eigenen Webhook an.

01Lemon Squeezy verbinden

  1. Einen API-Schlüssel in Lemon Squeezy erstellen

    API-Schlüssel von Lemon Squeezy lassen sich nicht einschränken, erstelle also einen nur für Tally: Tally liest nur die Bestellungen deines Shops und legt einen eigenen Webhook an, und du kannst den Schlüssel jederzeit löschen. Öffne in Lemon Squeezy Settings, API und erstelle einen Schlüssel. Mehr tut Tally damit nicht:

    BerechtigungZugriffWozu
    OrdersLesenJeder Verkauf: Betrag, Steuer und Erstattungen sowie die E-Mail des Kunden (sofort gehasht, nie gespeichert).
    Subscription invoicesLesenVerlängerungen und Tarifwechsel.
    WebhooksSchreibenTally legt einen eigenen Webhook im Shop an, damit Zahlungen binnen Sekunden ankommen.

    Ein im Testmodus erstellter Schlüssel sieht nur Testbestellungen: Nutze einen, um es zuerst auszuprobieren.

  2. Den API-Schlüssel einfügen

    Öffne auf der Seite Integrations deiner Website (oder im Schritt Payments, wenn du eine Website hinzufügst) Lemon Squeezy und fülle aus:

    • API key: Tally speichert ihn verschlüsselt und zeigt ihn nie wieder an.
    • Store (optional): Nur wenn dein Schlüssel mehr als einen Shop sieht: seine Adresse, sein Name oder seine ID.

    Klicke dann auf Connect Lemon Squeezy.

  3. Tally prüft den Zugang und importiert das letzte Jahr

    Der Schlüssel wird an deinem Shop geprüft, ein eigener Webhook kommt hinzu, damit neue Bestellungen sofort ankommen, und die letzten 365 Tage werden importiert. Lemon Squeezy sendet die Custom Data eines Checkouts nur in Webhooks, importierte Bestellungen werden also über die E-Mail des Kunden verknüpft; Bestellungen ab jetzt tragen die Besucher-ID.

02Die Besucher-ID als Custom Data übergeben

Auf Seiten mit Kauf-Links hängen ein paar Zeilen den Wert des Cookies _tally_vid als checkout[custom][tally_visitor_id] an jeden Checkout-Link von Lemon Squeezy an. Ein Checkout, den dein Server erstellt, nimmt ihn in checkout_data.custom auf.

Code anzeigen für

// On pages with Lemon Squeezy buy links: add the visitor id as custom data.
const visitorId = (document.cookie.match(/(?:^|; )_tally_vid=([\w-]+)/) || [])[1];
for (const link of document.querySelectorAll('a[href*=".lemonsqueezy.com/checkout/buy/"]')) {
  const url = new URL(link.href);
  if (visitorId && !url.searchParams.has('checkout[custom][tally_visitor_id]')) {
    url.searchParams.set('checkout[custom][tally_visitor_id]', visitorId);
    link.href = url.href;
  }
}

// Express with cookie-parser, where you create a Lemon Squeezy checkout.
app.post('/checkout', async (req, res) => {
  const visitorId = req.cookies['_tally_vid'];
  const response = await fetch('https://api.lemonsqueezy.com/v1/checkouts', {
    method: 'POST',
    headers: {
      Accept: 'application/vnd.api+json',
      'Content-Type': 'application/vnd.api+json',
      Authorization: 'Bearer ' + process.env.LEMONSQUEEZY_API_KEY,
    },
    body: JSON.stringify({
      data: {
        type: 'checkouts',
        attributes: { checkout_data: { custom: visitorId ? { 'tally_visitor_id': visitorId } : {} } },
        relationships: {
          store: { data: { type: 'stores', id: '1' } },
          variant: { data: { type: 'variants', id: '1' } },
        },
      },
    }),
  });
  const { data } = await response.json();
  res.redirect(303, data.attributes.url);
});

03Auf einer Website ohne Cookies

Ohne Cookie gibt es keine ID zum Anhängen, identifiziere den Käufer also mit der E-Mail, mit der er bezahlt: Ziele und identify.

04Prüfen, ob es geklappt hat

05Was nicht gelesen wird

Fehlt etwas, oder sieht es bei dir anders aus? Schreib an support@tallybyoutpost.com und nenne die Seite.