De största affärerna tog längst tid att offerera. Nu är de ett enda dokument.
Indivd säljer butiksanalys till detaljhandelskedjor där inga två butiker köper samma upplägg. En offert för ett nät på fyrtio butiker innebar flera dokument som sattes ihop för hand och hölls i synk för hand. I dag konfigurerar säljaren en gång och offerten prissätter varje butik på egna villkor, i HubSpot, på en licens utan CPQ.
butiker i en offert. Butiksnätets storlek avgör inte längre hur snabbt ni kan sälja till det.
dokument per affär i stället för en mapp. En siffra, en underskrift, inget som hålls i synk för hand.
licensuppgraderingar och inget extra verktyg. Det körs på den Sales Professional-licens som redan är betald.
I drift med riktiga kunder sedan 3 augusti 2026.
Fem saker en säljchef får som inte fanns tidigare.
Samma katalog, samma säljare, samma licens. Det som ändrades är hur många dokument en affär kräver, och hur mycket av den någon behöver skriva in.
Ett dokument per affär
Ett nät på tvåhundra butiker är en offert, inte en mapp full av dem.
Beskriv det en gång
Säljaren konfigurerar en produkt en gång och väljer butikerna. Systemet skriver varje rad efter det.
Inget kan gå isär
Pris, omfattning och utrullningsplan genereras från samma rader, så dokumentet kan inte motsäga sig självt.
Villkor som vd:n äger
Version, datum och länk till de allmänna villkoren kommer från en enda post. Ingen säljare kan ändra dem i en offert.
Ingen licensuppgradering
Ingen Revenue Hub, inget extra verktyg, och varje konfiguration stannar i CRM:et för rapportering och förnyelser.
En konfiguration in. Fyrtio produktrader ut.
Det riktiga kortet, återskapat på sidan och i en loop. En produkt konfigureras, butikerna väljs och affären fyller sig själv. När man sparar en andra gång stäms raderna av i stället för att dupliceras.
En säljare öppnar affären, väljer en produkt, anger nivå, fas och hårdvaruupplägg och markerar de butiker den gäller. När man sparar skrivs en produktrad per butik. Att spara igen duplicerar ingenting: det skapar det som saknas, arkiverar det som tagits bort och lämnar resten orört.
Regeln som gör det säkert att spara igencard_id, och diffen bakom den
Varje produktrad bär id:t för den konfiguration som skapade den. Att spara igen är en avstämning, inte en ny insättning: backend skapar det som saknas, arkiverar det som tagits bort och lämnar resten orört. Lägg till tre butiker vecka sex så tar offerten upp dem.
Varför det spelar roll affärsmässigt: en säljare kan omförhandla en pågående affär utan att någon bygger om offerten för hand, och utan de tysta dubbletter som gör en totalsumma fel.
Det kortet vägrar sparafyra valideringar, speglade i motorn
Minst en butik. En fas, så snart affären innehåller en prenumeration. Antal låst till ett för allt som räknas per butik, med ett enda godkänt undantag. Rabatter mellan 0 och 100, och en uttrycklig volymrabatt på varje återkommande rad, där noll är ett giltigt svar.
/* Non hardware products are locked at quantity 1 because they are counted per location: quantity 2 would charge the same store twice. Enterprise is the one approved exception, matched by id and by name so it survives a rename and a recreation of the product. */ const QUANTITY_FREE_PRODUCT_IDS = ['47257531981']; const QUANTITY_FREE_PRODUCT_NAMES = ['enterprise'];
Låsningen gällde 193 av de 198 produkterna i biblioteket, och den fanns på två ställen: kortet vägrar spara och motorn ger samma varning. Att bara rätta gränssnittet hade gett en offert som sparades utan problem och sedan klagade på sig själv.
Tvåhundra butiker är inte fyrtio butiker gånger fem.
Två värden in, resten är aritmetik och inte ett löfte. Det sveper av sig självt. Dra i reglaget om ni vill se er egen siffra.
Ett upplägg är ett eget sätt att köpa: nya kameror och installation, befintliga kameror, endast hårdvara, en djupare servicenivå. En riktig katalog har dussintals.
Dokumentet bygger sig självt och utelämnar det som inte gäller.
Ändra affärens form så byggs offerten om. Inget skrivs två gånger, och ingen rubrik visas någonsin utan sitt värde.
Välj en. Listan med avsnitt till höger byggs om.
- Sidhuvud, offertnummer och giltighetgenererat
- Upprättad för, och avgenererat
- Sammanfattninggenererat
- Vad Indivd gör möjligtgenererat
- Omfattninggenererat
- Vad ni fårgenererat
- Prissammanställning, alla butikergenererat
- Prisdetaljer, per butikgenererat
- Driftsättningsplangenererat
- Faktureringsuppgiftergenererat
- Frågor ert team kan ställagenererat
- Vad våra kunder sägergenererat
- Där Indivd används i daggenererat
- Nästa steggenererat
- Godkännande och allmänna villkorgenererat
- Bilaga, valfri hårdvaragenererat
Återkommande och engångsbelopp hålls isär
Rabatter visas som en egen rad i stället för att gömmas i en totalsumma, inom varje fas.
Genererad från samma rader
Land, paket, fas, hårdvaruupplägg och antal butiker, framtaget från de rader som ger priserna.
Bundet till en namngiven version
Underskriften binder den här offerten, tilläggsvillkoren och de allmänna villkoren i en namngiven version och ett datum.
Hur mallen får sitt innehålloch den begränsning i HubSpot som tvingade fram det
En offertmall kan bara läsa det som är kopplat till offerten, och egna egenskaper på själva Quote-objektet kommer fram tomma. Därför blev affären ytan som renderas: motorn skriver färdiga HTML-block i 14 affärsegenskaper och mallen infogar dem. Mallen står för layout och typografi och innehåller ingen affärslogik alls.
{% if DEAL.render_pricing_html %}
<div class="ey">PRICING DETAILS
{% if DEAL.flag_hardware_only != "true" %} · PER LOCATION {% endif %}
</div>
{{ DEAL.render_pricing_html|safe }}
{% endif %}
Var de juridiska villkoren finnsen inställningstabell utan databas
HubDB ingick inte i licensen, så version, datum och länk för de allmänna villkoren ligger på en enda dedikerad företagspost som används som inställningstabell. Den är ingen kund. Vd:n redigerar den i HubSpot, varje offert i varje affär hämtar den, och ingen säljare kan ändra villkoren i sitt eget dokument.
Varje produkt som HubSpot säljer för det här krävde en licens som den portalen inte har.
Sex stängda dörrar, och de sex saker som byggdes i stället. De löses en i taget. Klicka på en dörr för att styra själv.
Kodade offertmoduler
Blev allmänt tillgängliga i juni 2026 och kräver Revenue Hub Professional.
En offertmall i ett child theme, helt matad av affärsegenskaper.
Egenskaper på offerten
Egna egenskaper på Quote-objektet når aldrig det renderade dokumentet.
Allt variabelt innehåll flyttades till affären, som är kopplad och faktiskt når fram.
HubDB
Ingick inte i avtalet, och det var den naturliga platsen för de juridiska villkoren.
En dedikerad företagspost som fungerar som global inställningstabell.
Serverlösa funktioner
Inte tillgängligt i den här plattformsversionen eller på den här licensnivån.
En liten Python-tjänst på en dedikerad server, som räknar och inget annat.
Fält som köparen kan redigera
Nya CPQ stöder dem men inte kodade mallar. De två utesluter varandra.
Redigering sker i CRM:et, där den loggas, och aldrig i dokumentet.
Produktrader på en butik
Produktrader hör till affärer i HubSpots modell och kan inte hänga på en platspost.
En produktrad per produkt och butik, var och en märkt med den butik den hör till.
Hur de fyra lagren hänger ihopett diagram, i ord
Platser är poster i CRM:et, som arkiveras och aldrig raderas, så att historisk rapportering behåller sin grund. Konfigurationer är produktrader. Villkoren är en post som vd:n äger. Det enda som finns utanför HubSpot är aritmetiken, den enda del som ingen behöver söka i, filtrera eller rapportera på.
Offerten är ingen PDF. Den är en rad per butik.
Allt som dokumentet skriver ut stannar i CRM:et som strukturerad data. Det är den delen som fortsätter att löna sig efter underskriften.
Hur stor del av nätet är faktiskt i drift?
Täckningen är ett filter på affären, inte en fråga till kundansvarig.
Vad fakturerar det här nätet varje månad?
Prognosen är inte längre beroende av att någon öppnar PDF:en.
När förnyas varje butik?
Varje butik har sin egen löptid och faktureringsstart, så förnyelsedatumet är ett fält och inte något man måste minnas. Expansion är samma rad med en senare fas.
Det enkla svaret hade varit att bygga offertverktyget utanför HubSpot.
Det ger en snygg PDF och en död affärspost: inget att rapportera på, inget att förnya från, inget som nästa person kan ta över. Här stannade allt där det spelade roll, och bara aritmetiken flyttade ut.
Bygg er egen konfigurerbara offert i HubSpot.
- Prissatt per butik, per anläggning, per filial eller per licens, på de objekt ni redan har
- Ingen Revenue Hub och inget extra verktyg: det här körs på Sales Professional
- I drift hos riktiga kunder, inte en prototyp
Trettio minuter, er affär på skärmen, inga presentationsbilder.