Was im Kostenvoranschlag steckt
- Auftrag in Kürze. Die Nummer, ein kurzer Titel und ein Satz dazu, worum es geht.
- Kunde und Daten. Für wen das Angebot ist, das Datum, die Gültigkeit und wer es erstellt hat.
- Enthaltene Leistungen. Jede Position mit Menge, Einheit und Preis. Nur diese Zeilen ergeben die Summe.
- Rabatt, Steuer, Summe. Ein Rabatt in Prozent, die Umsatzsteuer je Satz und die Endsumme in einem dunklen Balken.
- Optionale Extras. Bepreiste Zusatzleistungen mit Ankreuzfeldern, außerhalb der Summe.
- Annahme. Linien für Name, Datum und Unterschrift des Kunden.
Wofür der Kostenvoranschlag gedacht ist
Mit der Vorlage nennen Sie den Preis einer Arbeit, bevor sie beginnt. Malerbetriebe, Werkstätten, Agenturen und Berater schicken solche Schreiben jede Woche. Ob Sie es Angebot oder Kostenvoranschlag nennen, das Blatt ist dasselbe.
Jede Position hat Menge, Einheit und Preis, etwa Quadratmeter oder Stunden. Positionen, die Sie als optional markieren, wandern in einen eigenen Kasten und zählen nicht zur Summe. Ein Rabatt in Prozent gilt für alle enthaltenen Leistungen.
Unten auf der Seite steht ein Annahmeblock. Der Kunde trägt Namen und Datum ein, unterschreibt und schickt die Seite zurück.
Was ein guter Kostenvoranschlag enthält
- Eine Nummer, auf die sich beide Seiten später beziehen.
- Das Datum und eine Frist, bis zu der die Preise gelten.
- Eine kurze Beschreibung des Auftrags in einfachen Worten.
- Jede Leistung mit Menge, Einheit und Einzelpreis.
- Rabatt, Umsatzsteuer und Endsumme jeweils in einer eigenen Zeile.
- Ob die Preise verbindlich sind oder nur eine Schätzung.
- Wie der Kunde annimmt und was danach passiert.
Verbindlich oder unverbindlich?
Schreiben Sie klar dazu, ob Ihr Preis fest ist oder eine Schätzung. Davon hängt ab, was bei Mehrkosten passiert.
Ein verbindlicher Kostenvoranschlag ist ein Festpreis. Kostet die Arbeit am Ende mehr, tragen Sie in der Regel die Differenz. Ein unverbindlicher Kostenvoranschlag ist eine fachliche Schätzung. Der Endpreis darf davon abweichen, aber nicht beliebig.
Zeichnet sich ab, dass ein unverbindlicher Voranschlag deutlich überschritten wird, müssen Sie das dem Kunden unverzüglich mitteilen. So sieht es § 649 BGB vor. Der Kunde kann den Vertrag dann kündigen. Er zahlt in diesem Fall nur einen Teil der Vergütung für die bis dahin erbrachte Arbeit und die Auslagen.
- Schreiben Sie „verbindlich“ oder „unverbindlich“ in den Titel oder in die Bedingungen.
- Nennen Sie eine Gültigkeit, z. B. 30 Tage. Bei schwankenden Materialpreisen lieber kürzer.
- Halten Sie fest, ob der Kostenvoranschlag selbst etwas kostet. Ohne Vereinbarung ist er im Zweifel kostenlos.
- Melden Sie absehbare Mehrkosten schriftlich, bevor Sie weiterarbeiten.
Dies ist eine allgemeine Information, keine Steuer- oder Rechtsberatung. Für Ihren Einzelfall fragen Sie bitte einen Anwalt oder Ihre Handwerkskammer.
Die Felder der Vorlage
Der Kostenvoranschlag liest diese Felder. Mit optional markierte Felder dürfen leer bleiben.
| Feld | Was es ausfüllt |
|---|---|
| Allgemein | |
currency | Währung aller Beträge, z. B. EUR. |
locale | Schreibweise von Zahlen und Datum, z. B. de-DE. |
| Anbieter | |
seller.name | Ihr Firmenname (Ihre Markeneinstellungen haben Vorrang). |
seller.short | Ein Kurzname als Schriftzug, solange Sie kein Logo haben. |
seller.address | Ihre Anschrift, eine Zeile pro Zeile. |
seller.email | Die Adresse, an die der Kunde antwortet. |
seller.tax_id | Ihre USt-IdNr. oder Steuernummer. |
| Kunde | |
client.name | Der Name des Kunden. |
client.contact | Für wen beim Kunden das Angebot ist (optional). |
client.address | Die Anschrift des Kunden. |
| Kostenvoranschlag | |
quote.number | Die Nummer des Kostenvoranschlags. |
quote.title | Der Auftrag in wenigen Worten, als Überschrift. |
quote.summary | Ein Satz dazu, was der Kunde bekommt. |
quote.issued | Das Datum des Kostenvoranschlags. |
quote.valid_until | Der letzte Tag, an dem die Preise gelten. |
quote.prepared_by | Wer den Kostenvoranschlag erstellt hat. |
quote.discount | Ein Rabatt auf die enthaltenen Leistungen in Prozent (0 für keinen). |
quote.notes | Eine Notiz neben den Summen, z. B. zum Zeitplan. |
quote.acceptance | Wie der Kunde annimmt und was danach passiert. |
quote.terms | Ihre Bedingungen, z. B. ob der Preis verbindlich ist. |
| Positionen | |
items[].description | Eine Leistung, eine Zeile pro Position. |
items[].detail | Eine kurze Erläuterung unter der Position (optional). |
items[].quantity | Die Menge. |
items[].unit | Die Einheit, z. B. m² oder Stunden (optional). |
items[].unit_price | Der Preis je Einheit, netto. |
items[].vat_rate | Der Steuersatz der Position in Prozent. |
items[].optional | true für ein Extra, das außerhalb der Summe steht. |
Automatisch erstellen
Richten Sie die Vorlage einmal im Dashboard ein und lassen Sie Ihre Systeme sie füllen. Alle Wege unten nutzen dieselbe Vorlage. Eine Änderung am Design gilt also überall.
Aus Ihrer Anwendung, per API
Ihr Kalkulationsprogramm oder CRM sendet die Positionen mit einem Aufruf und erhält den fertigen Kostenvoranschlag als PDF.
Aus einer Tabelle
Eine CSV- oder XLSX-Datei mit einer Zeile pro Angebot wird zu einem PDF pro Zeile, gesammelt in einer ZIP-Datei.
In einem No-Code-Workflow
Eine Anfrage aus Ihrer Anwendung
Kopieren Sie die ID der Vorlage aus dem Editor und speichern Sie sie mit Ihren Daten in request.json. Dann senden Sie die Datei. Die Antwort ist das fertige PDF.
curl https://api.castpdf.com/v1/pdf \
-H "Authorization: Bearer $CASTPDF_API_KEY" \
-H "Content-Type: application/json" \
-d @request.json \
--output kostenvoranschlag.pdfimport { readFile, writeFile } from 'node:fs/promises';
const res = await fetch('https://api.castpdf.com/v1/pdf', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CASTPDF_API_KEY}`,
'Content-Type': 'application/json',
},
body: await readFile('request.json', 'utf8'),
});
if (!res.ok) throw new Error((await res.json()).error.message);
await writeFile('kostenvoranschlag.pdf', Buffer.from(await res.arrayBuffer()));<?php
$ch = curl_init('https://api.castpdf.com/v1/pdf');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CASTPDF_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => file_get_contents('request.json'),
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) !== 200) {
throw new RuntimeException($pdf);
}
file_put_contents('kostenvoranschlag.pdf', $pdf);{
"template_id": "IHRE_VORLAGEN_ID",
"data": {
"currency": "EUR",
"locale": "de-DE",
"seller": {
"name": "Malerwerkstatt Kranich GmbH",
"short": "Kranich",
"address": "Gerberstraße 4\n04105 Leipzig",
"email": "[email protected]",
"tax_id": "DE214553870"
},
"client": {
"name": "Zahnarztpraxis Lenz",
"contact": "z. Hd. Frau Hanna Lenz",
"address": "Karl-Heine-Straße 51\n04229 Leipzig"
},
"quote": {
"number": "KV-2026-058",
"title": "Renovierung der Praxisräume",
"summary": "Frische Wände und Decken in Empfang, Wartebereich und drei Behandlungsräumen, bei laufendem Betrieb an zwei Wochenenden.",
"issued": "2026-10-06",
"valid_until": "2026-11-05",
"prepared_by": "Jonas Kranich, Malermeister",
"discount": 5,
"notes": "Der Rabatt gilt für die enthaltenen Arbeiten. Wir arbeiten an zwei Wochenenden, damit die Praxis geöffnet bleibt.",
"acceptance": "Zur Beauftragung unterschreiben Sie bitte unten und senden die Seite vor Ablauf der Gültigkeit zurück. Danach stimmen wir die Termine mit Ihnen ab.",
"terms": "Unverbindlicher Kostenvoranschlag. Zusätzliche Arbeiten berechnen wir nach Absprache zu unserem Stundensatz."
},
"items": [
{
"description": "Abdeck- und Schutzarbeiten",
"detail": "Böden, Möbel und Geräte abdecken, Fenster abkleben",
"quantity": 1,
"unit": "",
"unit_price": 380,
"vat_rate": 19,
"optional": false
},
{
"description": "Wände spachteln und schleifen",
"quantity": 145,
"unit": "m²",
"unit_price": 9.5,
"vat_rate": 19,
"optional": false
},
{
"description": "Anstrich Wände, Dispersionsfarbe weiß",
"detail": "Zweifacher Anstrich, scheuerbeständig",
"quantity": 145,
"unit": "m²",
"unit_price": 7.8,
"vat_rate": 19,
"optional": false
},
{
"description": "Decken streichen",
"quantity": 62,
"unit": "m²",
"unit_price": 8.4,
"vat_rate": 19,
"optional": false
},
{
"description": "Türzargen lackieren",
"quantity": 6,
"unit": "Stück",
"unit_price": 95,
"vat_rate": 19,
"optional": false
},
{
"description": "Entsorgung und Endreinigung",
"quantity": 1,
"unit": "",
"unit_price": 240,
"vat_rate": 19,
"optional": false
},
{
"description": "Akzentwand im Wartebereich, Farbton nach Wahl",
"quantity": 1,
"unit": "",
"unit_price": 420,
"vat_rate": 19,
"optional": true
},
{
"description": "Wandschutzpaneele am Empfang",
"quantity": 4,
"unit": "Stück",
"unit_price": 135,
"vat_rate": 19,
"optional": true
}
]
}
}Neu bei der API? Der Quickstart führt Sie in etwa fünf Minuten vom kostenlosen Schlüssel zum ersten PDF.
Ohne Code erstellen
- Kostenlos registrieren. Sie brauchen keine Karte. „Vorlage verwenden“ öffnet den Editor mit dieser Vorlage.
- Die Vorlage für den Kostenvoranschlag öffnen. Tragen Sie Ihren Betrieb, den Kunden und die geplanten Arbeiten in die Beispieldaten ein. Ändern Sie die englischen Überschriften und die Farbe, bis der Voranschlag zu Ihrem Briefpapier passt.
- Vorschau prüfen. Die Vorschau aktualisiert sich beim Tippen und ist kostenlos. Jede Seite trägt eine kleine Markierung „Preview“.
- PDF erstellen. Bestätigen Sie Ihre E-Mail-Adresse und klicken Sie auf Generate PDF. Das ergibt ein sauberes PDF, das als ein PDF in Ihrem Tarif zählt.
Anpassen
- Setzen Sie den Rabatt auf 0, dann verschwindet die Rabattzeile.
- Markieren Sie eine Position mit optional: true, damit sie in den Kasten für Extras wandert.
- Ändern Sie die Überschrift im Editor in „Angebot“, wenn das in Ihrer Branche üblich ist.
- Schreiben Sie Anzahlung oder Zahlungsplan in den Annahmetext.
- Jedes Speichern ist eine neue Version. Ihre letzten 50 Versionen bleiben erhalten.
Extras, die den Preis nicht aufblähen
Kunden mögen Auswahl. Ein Angebot, das jede Idee in die Summe packt, wirkt aber teuer. Die Vorlage trennt beides.
Die enthaltenen Positionen ergeben Zwischensumme, Rabatt, Steuer und Endsumme. Optionale Positionen stehen in einem gestrichelten Kasten mit Ankreuzfeldern und Nettopreisen. Der Kunde kreuzt an, was er möchte, und Sie nehmen es in den Auftrag auf.



