Stripe DATEV Export – automatisch.Du hast Stripe eingebaut. Die Buchhaltung musst du nicht auch noch programmieren.
finHero holt deine Stripe-Zahlungen, Gebühren, Erstattungen und Auszahlungen ab und macht daraus einen fertigen DATEV-Buchungsstapel inklusive Belegen. Deine Steuerkanzlei importiert ihn direkt – ohne CSV-Gefrickel und ohne eigene Export-Skripte.
Das Problem
Stripe-Daten sind nicht buchhaltungsfertig
Der CSV-Export aus Stripe sieht nach Buchhaltung aus – ist es aber nicht. Spätestens beim Jahresabschluss kommen die Rückfragen deiner Kanzlei.
„Paid“ ist kein Geldeingang
Stripe zahlt netto und gebündelt aus. Gebühren, Erstattungen und Disputes müssen getrennt gebucht werden, sonst stimmen die Salden nicht.
Belege fehlen
Jede Buchung braucht einen Beleg. Rechnungen und Gutschriften jeden Monat einzeln herunterladen und zuordnen kostet Stunden.
Abos müssen abgegrenzt werden
Wer Jahresabos verkauft, muss den Umsatz periodengerecht verteilen (pRAP). Von Hand ist das fehleranfällig.
Selbst bauen frisst Zeit
Ein Export-Skript ist schnell geschrieben. DATEV-Format, Kontenrahmen, Sonderfälle und Wartung kosten dich aber Wochen, die ins Produkt gehören.
Das Ergebnis
Das bekommt deine Steuerkanzlei
Jeden Monat ein fertiger Export im DATEV-Format – nachvollziehbar bis zur einzelnen Stripe-Transaktion.
- ✓Buchungsstapel im DATEV-Format, direkt importierbar
- ✓Rechnungen und Gutschriften als PDF, mit den Buchungen verknüpft
- ✓Stripe-Gebühren und Auszahlungen sauber getrennt gebucht
- ✓Transaktions-IDs im Buchungstext für schnelle Rückverfolgung
- ✓Kontierung nach SKR03 oder SKR04, abgestimmt mit deiner Kanzlei
| Umsatz € | Konto | Gegenkonto | Buchungstext |
|---|---|---|---|
| 49,00 | 1360 | 8400 | Stripe Zahlung · Pro-Abo · ch_3Q…8xK |
| 1,99 | 4970 | 1360 | Stripe Gebühr · ch_3Q…8xK |
| 490,00 | 1360 | 990 | Jahresabo · Abgrenzung (pRAP) |
| 19,00 | 8400 | 1360 | Erstattung · re_3Q…2Lm |
| 2.384,40 | 1200 | 1360 | Stripe Auszahlung · po_1Q…7Vb |
So funktioniert's
In drei Schritten zum automatischen DATEV-Export
Kein Code, keine Webhooks, kein Cronjob.
Stripe verbinden
Installiere die finHero-App aus dem Stripe Marketplace. Ein paar Klicks, keine Programmierung.
Konten festlegen
Wähle SKR03 oder SKR04 und hinterlege bei Bedarf eigene Konten – gern gemeinsam mit deiner Kanzlei.
Export erhalten
Jeden Monat liegt dein DATEV-Export bereit. Herunterladen, an die Kanzlei schicken, fertig.
Selbst bauen?
Klar, das könntest du auch selbst bauen.
Als Entwickler:in liegt der Gedanke nahe. Das steckt allerdings dahinter:
Selbst gebaut
- DATEV-Buchungsstapel-Format korrekt erzeugen
- Gebühren, Auszahlungen, Erstattungen und Disputes sauber abbilden
- Belege abrufen und den Buchungen zuordnen
- pRAP für Jahresabos berechnen
- Bei jeder Änderung an Stripe-API oder Kontenplan nachziehen
Mit finHero
- Läuft ab dem ersten Monat
- Buchungslogik mit deiner Kanzlei abstimmbar
- Auch rückwirkende Exporte möglich
- Monatlich kündbar
- Deine Zeit bleibt beim Produkt
Für Entwickler:innen: Stripe Checkout in Next.js einbauen
Falls Stripe bei dir noch nicht läuft: drei typische Setups mit realistischen Defaults (inkl. productId/priceId & Subscription). Sobald die ersten Zahlungen eingehen, übernimmt finHero den DATEV-Export – ohne weiteren Code.
1) Checkout-Session (Subscription) – API Route
// app/api/checkout/session/route.ts
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { apiVersion: "2023-10-16" });
export async function POST(req: Request) {
const { email, productId, priceId, customerId } = await req.json();
// Falls nur productId vorhanden → zu Price (recurring) auflösen
let resolvedPriceId = priceId;
if (!resolvedPriceId && productId) {
const prices = await stripe.prices.list({ product: productId, active: true, limit: 10 });
resolvedPriceId = prices.data.find(p => p.recurring)?.id || prices.data[0]?.id;
}
if (!resolvedPriceId) {
return Response.json({ error: "Kein Price gefunden." }, { status: 400 });
}
// Customer wiederverwenden/erstellen
const customer = customerId ? customerId : (await stripe.customers.create({ email })).id;
const session = await stripe.checkout.sessions.create({
mode: "subscription",
customer,
line_items: [{ price: resolvedPriceId, quantity: 1 }],
success_url: `${process.env.NEXT_PUBLIC_APP_URL}/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${process.env.NEXT_PUBLIC_APP_URL}/cancel`,
allow_promotion_codes: true,
metadata: { source: "pre-landing", plan_hint: productId || "n/a" },
});
return Response.json({ sessionId: session.id });
}2) Client – Redirect zu Checkout
// app/(marketing)/subscribe/page.tsx
"use client";
import { loadStripe } from "@stripe/stripe-js";
import { useState } from "react";
const stripePromise = loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY!);
export default function SubscribePage() {
const [loading, setLoading] = useState(false);
async function handleSubscribe() {
setLoading(true);
const res = await fetch("/api/checkout/session", {
method: "POST",
body: JSON.stringify({
email: "kunde@example.com",
// eines von beiden:
productId: "prod_ABC123", // → Server löst zu recurring price auf
// priceId: "price_123",
}),
});
const { sessionId } = await res.json();
const stripe = await stripePromise;
await stripe?.redirectToCheckout({ sessionId });
setLoading(false);
}
return (
<button className="btn btn-primary" onClick={handleSubscribe} disabled={loading}>
{loading ? "Weiterleiten…" : "Abo starten"}
</button>
);
}3) Webhook – Ereignisse verarbeiten (Basis)
// app/api/stripe/webhook/route.ts
import Stripe from "stripe";
export const config = { api: { bodyParser: false } }; // nur Pages Router; App Router liefert raw body
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { apiVersion: "2023-10-16" });
export async function POST(req: Request) {
const sig = req.headers.get("stripe-signature")!;
const raw = await req.text();
let event: Stripe.Event;
try {
event = stripe.webhooks.constructEvent(raw, sig, process.env.STRIPE_WEBHOOK_SECRET!);
} catch (err: any) {
return new Response(`Webhook Error: ${err.message}`, { status: 400 });
}
if (event.type === "checkout.session.completed") {
const session = event.data.object as Stripe.Checkout.Session;
// TODO: Onboarding, Feature-Freischaltung …
}
if (event.type === "invoice.paid") {
const invoice = event.data.object as Stripe.Invoice;
// TODO: Rechnungsdaten für finHero/DATEV vorbereiten
}
return new Response("ok");
}FAQ
Häufige Fragen zum Stripe DATEV Export
Kann ich Stripe direkt nach DATEV exportieren?
Stripe selbst bietet keinen DATEV-Export. Der CSV-Export enthält Rohdaten, die erst in Buchungssätze, Konten und Belege übersetzt werden müssen. finHero übernimmt genau das und liefert einen importfertigen DATEV-Buchungsstapel.
Werden Stripe-Gebühren und Auszahlungen korrekt gebucht?
Ja. Gebühren werden separat auf das passende Aufwandskonto gebucht, Auszahlungen dienen als Abstimmungspunkt zum Bankkonto. So stimmen die Salden.
Wie kommen die Belege nach DATEV?
finHero exportiert Rechnungen, Gutschriften und Stornos als PDF und verknüpft sie mit den passenden Buchungen – fertig für deine Kanzlei.
Muss ich dafür etwas programmieren?
Nein. Die Verbindung läuft über die finHero-App im Stripe Marketplace. Du schreibst keinen Code und richtest keine Webhooks ein.
Funktioniert das mit Stripe Billing und Abos?
Ja. Abo-Rechnungen werden mit exportiert, Jahresabos auf Wunsch periodengerecht abgegrenzt (pRAP).
Kann ich vergangene Monate nachträglich exportieren?
Ja. Auch rückwirkende Exporte sind möglich – praktisch, wenn die Buchhaltung nachgeholt werden muss.
Mein Unternehmen sitzt nicht in Deutschland – geht das trotzdem?
DATEV ist der Standard bei deutschen Steuerkanzleien. Wenn deine Kanzlei ein anderes System nutzt, sind auch Exporte außerhalb von DATEV möglich.
Brauche ich für Stripe Checkout eine productId oder eine priceId?
Für Subscriptions übergibst du eine priceId. Wenn du nur die productId hast, kann dein Backend den passenden wiederkehrenden Preis auflösen – siehe Code-Beispiel oben.
Noch Fragen? Zum Hilfe-Center
Schluss mit Stripe-CSVs für die Buchhaltung.
Verbinde Stripe in wenigen Minuten und sieh dir deinen ersten DATEV-Export an.
7 Tage kostenlos testen7 Tage kostenlos · monatlich kündbar




