Create a Fortnox Offer from a Quote

Trigger from a quote (workflow when Create offer in Fortnox becomes Yes) or from the Fortnox offer app card on the linked deal — see Deal — Fortnox offer.

The app maps quote line items and related deal/company data to Fortnox (same line-row logic as Create an Invoice from a deal). Enable HubSpot quote to Fortnox offer in App settings. After a successful create, the Fortnox offer number is stored on the quote.

Triggering is done via a CRM subscription to POST /hubspot_event_subscriptions when create_offer_in_fortnox becomes Yes (see CRM subscriptions & webhooks). HubSpot may send subscriptionType: "object.propertyChange" with objectTypeId 0-14 for Quotes — the app supports that format as well as legacy quote.propertyChange.

Field mappings (HubSpot → Fortnox Offer)

Field HubSpot Direction Field Fortnox Notes
Company: fortnox_id -> Offer.CustomerNumber Primary company on the associated Deal
Quote: hs_currency -> Offer.Currency
Quote: hs_expiration_date -> Offer.OfferDate YYYY-MM-DD; if missing or invalid, today’s date is used
Deal: amounts_include_vat -> Offer.VATIncluded Sent as true only when set to Yes/true; otherwise omitted
(Deal id) -> Offer.Remarks Prefix HUBSPOT_DEAL_ID:<dealId> (traceability for Fortnox order → HubSpot Order sync)
Quote or Deal: description -> Offer.Remarks Appended after the deal-id line when present (Quote description preferred)
Contact (from Deal) -> Offer.YourReference First associated contact name when available
Deal owner -> Offer.OurReference From hubspot_owner_id
Company: fortnox_cost_center -> Offer.CostCenter Uppercased; requires costcenter Fortnox scope
Line item: hs_sku -> OfferRow.ArticleNumber When set; article must exist in Fortnox when SKU is used
Line item: name -> OfferRow.Description Product name only (same as invoice rows)
Line item: quantity -> OfferRow.Quantity
Line item: price, discount, hs_discount_percentage, hs_total_discount -> OfferRow.Price, Discount, DiscountType Same rules as invoice rows (amount vs percent discount)
Line item: tax -> OfferRow.VAT VAT percentage; may be enriched from Fortnox article when missing
Quote: fortnox_offer_document_number <- Offer.DocumentNumber Written on the Quote after Fortnox returns the created offer

Typical requirements