Release Notes
Stay up to date with the latest improvements, features, and bug fixes
Quick navigation
- May 26, 2026 — Import Fortnox invoices as HubSpot Invoices
- May 18, 2026 — Private person customer sync (Fortnox → HubSpot contact)
- May 11, 2026 — HubSpot app cards (Fortnox customer & invoice)
- May 7, 2026 — Order field coverage expansion (both directions)
- April 30, 2026 — HubSpot Order → Fortnox Order
- April 28, 2026 — Fortnox invoice PDF attached to HubSpot deal
- April 22, 2026 — HubSpot Quotes → Fortnox offers & Fortnox orders → HubSpot Orders (overview)
- April 22, 2026 - Fortnox invoice & order pipelines: auto-recreate on sync
- April 21, 2026 - Fortnox Way of Delivery: send invoice via API
- April 20, 2026 - Fortnox price lists & multi-currency product prices
- April 16, 2026 - Fortnox Way of Delivery → customer default invoice delivery
- April 8, 2026 - Bookkeep after create & credit invoices from deals
- March 30, 2026 - Fortnox PaymentWay on deals
- March 20, 2026 - HubSpot Quotes → Fortnox Offers; Fortnox Orders → HubSpot Orders & CRM webhooks
- March 13, 2026 - Cost Center Uppercase Normalization
- March 10, 2026 - Amounts Include VAT (Deal property)
- March 3, 2026 - Invoice vs Delivery Note & Cash Invoice (Deal controls)
- February 4, 2026 - Product Status Sync from Fortnox
- January 20, 2026 - Order Number Mapping and Price Handling Improvements
- November 19, 2025 - VAT Support for Line Items
- November 3, 2025 - Remarks Field Enhancements
- November 3, 2025 - Order Number Sync to Fortnox Invoices
- October 23, 2025 - Billing Email for Fortnox Invoices
- October 20, 2025 - Enhanced Line Item Description Mapping
- October 17, 2025 - Deal Owner Information in Fortnox Invoices
Import Fortnox invoices as HubSpot Invoices New feature
You can now choose whether Fortnox invoices land in HubSpot as Deals (as today) or as native HubSpot Invoices — the same lists and views you use for billing in HubSpot (Open, Overdue, Paid, and so on). Deal import stays the default; turn on the new option only if you want invoices in the Invoice object instead of the sales pipeline.
- Fortnox invoices appear in HubSpot’s Invoices area with amount, currency, dates, and payment status kept in sync.
- Each invoice is linked to the matching HubSpot company (same customer matching as deal import).
- Line items from Fortnox are added when the invoice is first imported.
- The Fortnox invoice PDF is attached to the HubSpot invoice, including when payment status changes.
- The Fortnox invoice number is stored on the record so the same invoice is updated on the next sync — not duplicated.
HubSpot Invoices use built-in status labels, not a custom pipeline like deals. The app sets status automatically from Fortnox:
- Credited in Fortnox → shown as credited / voided in HubSpot
- Fully paid in Fortnox → Paid in HubSpot
- Unpaid (including overdue) → Open in HubSpot — use due date and HubSpot’s Overdue tab to find late invoices
If you keep deal import, nothing changes: you still map Fortnox states to your Fortnox invoice deal pipeline stages in settings.
- In app settings, turn on Fortnox invoice to HubSpot (if not already on).
- Under Connection, re-authenticate HubSpot once after this update — the integration needs permission to work with Invoices in your portal.
- Enable Import as HubSpot Invoice (instead of Deal). If re-auth is still needed, the setting stays off and explains what to do.
Fortnox connection is unchanged — no extra Fortnox steps. Switching between deals and Invoices only affects new imports; records already in HubSpot are left as they are.
📚 Get Started — Syncing invoices to HubSpot Invoices · App settings
Private person customer sync (Fortnox → HubSpot contact) New feature
Fortnox customers of Type = PRIVATE can now be synced to HubSpot as a company and an associated HubSpot contact (when the nested setting is on). This improves the B2C customer flow: private buyers get both a company record (for Fortnox linkage and deals) and a proper person contact in the CRM. The contact is created (or updated) from the customer’s name, Fortnox Email, phone, and address, and primary-associated with the company — EmailInvoice is not used for the contact.
fortnox_customer_type— enumeration on companies with labels Company / Private person and stored valuesCOMPANY/PRIVATE, mirroring the Fortnox customerTypefield.- For private-person customers, the company
domainis intentionally cleared (private persons typically do not have a corporate domain).
A new nested toggle Create contact for private persons appears under Sync Companies in app settings. Fortnox customers of Type = PRIVATE are always synced as HubSpot companies; when this toggle is enabled (and Sync Companies is on), each PRIVATE customer with a non-empty Fortnox Email also triggers a HubSpot contact upsert (search by that email, then create or update, then associate with the company). The Fortnox EmailInvoice field is used for company billing_email but is not used to match or set the HubSpot contact — without Email, the contact step is skipped.
Existing company-only sync behaviour is unchanged when the toggle is off.
📚 Get Started — Private person customers · App settings (enable Create contact for private persons under Sync Companies)
HubSpot app cards — Fortnox customer & Fortnox invoice New UI
Deal and company sidebar actions now ship as HubSpot app cards (UI extensions on the current developer platform): Fortnox invoice on deals and Fortnox customer on companies. They replace the legacy CRM extension cards for those surfaces and keep the same create flows (“Create as invoice in Fortnox” / “Create as customer in Fortnox”) behind the new UI.
- Open a company or deal record and customize the right sidebar.
- In the sidebar editor, find the Apps section and add Fortnox customer or Fortnox invoice if they are not already on the layout.
- If an older “classic” Fortnox card still appears, remove it from the layout so only the new app card remains.
Order field coverage expansion (both directions) Enhancement
The HubSpot Order ↔ Fortnox Order sync now covers the full set of header fields shown in the integration spec — labels, payment/delivery terms, PO number, invoice email, delivery date, references, and both billing & shipping addresses — in both directions.
These are added automatically (alongside the existing create_order_in_fortnox and order_number_in_fortnox) the first time the Fortnox-order sync runs after upgrade, or on next (re-)authentication:
fortnox_labels— multi-select; allowed valuesinternal,external,warranty,orderfortnox_terms_of_payment— Betalningsvillkorfortnox_your_order_number— PO Number (FortnoxYourOrderNumber)fortnox_invoice_email— invoice email recipientfortnox_delivery_date— Leveransdatumfortnox_way_of_delivery— Leveranssättfortnox_terms_of_delivery— Leveransvillkorfortnox_your_reference— Er referens (overrides the contact-derived default)fortnox_billing_address_street,fortnox_billing_address_city,fortnox_billing_address_postal_code,fortnox_billing_address_country— Faktureringsadress (HubSpot Order has no native billing address)
Leveransadress reuses the standard HubSpot Order shipping fields: hs_shipping_address_street, hs_shipping_address_city, hs_shipping_address_postal_code, hs_shipping_address_country.
On every order sync, the new HubSpot Order properties are populated from Fortnox: Labels[].Description, TermsOfPayment, YourOrderNumber, EmailInformation.EmailAddressTo, DeliveryDate, WayOfDelivery, TermsOfDelivery, YourReference, Address1/City/ZipCode/Country (Faktureringsadress) and DeliveryAddress1/DeliveryCity/DeliveryZipCode/DeliveryCountry (Leveransadress). Empty Fortnox values clear the corresponding HubSpot property. Cancelled and pipeline-stage handling are unchanged.
- Header fields:
fortnox_terms_of_payment,fortnox_your_order_number,fortnox_way_of_delivery,fortnox_terms_of_delivery, andfortnox_delivery_dateare mapped onto the Fortnox order payload when set. - YourReference precedence:
fortnox_your_referenceon the Order overrides the default (first associated contact name). - EmailInformation:
fortnox_invoice_emailon the Order is preferred; falls back to companybilling_email. - Faktureringsadress: order-level
fortnox_billing_address_*is used first; missing fields fall back to the company's address (address/city/zip/country). Empty fields are omitted so Fortnox keeps the customer-record defaults. - Leveransadress: taken from the HubSpot Order standard
hs_shipping_address_*fields.
📚 Get Started — Syncing Fortnox Orders to HubSpot Orders · Get Started — Create a Fortnox Order from a HubSpot Order
HubSpot Order → Fortnox Order New capability
HubSpot Orders can now create Fortnox orders, completing the symmetry with Deal → Invoice and Quote → Offer. Trigger by setting the order property Create order in Fortnox to Yes; the Fortnox document number is written back to order_number_in_fortnox for idempotency.
- App setting: Enable HubSpot order to Fortnox order.
- Order properties:
create_order_in_fortnox(trigger) andorder_number_in_fortnox(written on success). Both are created automatically on (re-)authentication if missing. - CRM subscription: a single subscription on
POST /hubspot_event_subscriptionshandles bothorder.propertyChangeand the modernobject.propertyChangepayload.
HubSpot does not allow adding line items to orders created manually in the Orders UI — line items can only be set when an order is created via integration/API or rolled up from a Deal. To still cover the manual case, the integration falls back to the associated Deal:
- If the Order has no line items but is associated with exactly one Deal, the Deal's line items are used.
- If the Order also has no associated company, the Deal's company is used.
- If 0 or more than 1 Deals are associated, the run fails with “Order has no line items.”
- Idempotent: the create is skipped if
order_number_in_fortnoxis already set. - Validation: exactly one company with a Fortnox id, line items in a single currency, no recurring line items, and articles that exist in Fortnox.
- Mapping:
POST /3/orders/withOrderRowsusingDeliveredQuantity(identical to invoice rows).
Fortnox invoice PDF attached to HubSpot deal New capability
When a Fortnox invoice is synced into a HubSpot deal, the invoice PDF is now also attached to the deal as a Note engagement, visible in the deal's activity timeline.
- First import: the PDF is downloaded from Fortnox and attached when a HubSpot deal is created from a Fortnox invoice.
- State transitions: when an existing deal is updated and its deal stage changes (e.g. Unpaid → Paid in full, Unpaid → Credited, Unpaid → Overdue), the latest PDF is fetched and a fresh Note is added.
- No change: if the deal stage didn't change on a re-sync, no new PDF is uploaded.
- Direction: this only applies to the Fortnox → HubSpot direction. PDFs are not uploaded back to Fortnox when a deal triggers a HubSpot → Fortnox flow.
- Files are stored in HubSpot Files under
/fortnox-invoices/<portalId>/with access set to Private, so only authenticated CRM users can view them. - Each transition produces a new Note on the deal so you keep a timeline of state changes; the underlying file is overwritten when the same invoice is re-uploaded.
If downloading the PDF or uploading to HubSpot fails, the deal sync still succeeds. The error is logged so the attachment can be re-tried on the next state change.
print scope. Existing installations need to re-authenticate the Fortnox connection once to grant the new scope — otherwise PDF downloads will fail with Fortnox error 1000030. The app's standard re-auth flow surfaces this automatically when a missing scope is detected.
HubSpot Quotes → Fortnox offers & Fortnox orders → HubSpot Orders New capability Overview
This note pulls together the end-to-end commercial path between HubSpot and Fortnox: from a Quote in CRM to a Fortnox offer (offert), and from a Fortnox order back into HubSpot Order records — including how deals, quotes, companies, and line items stay linked when the data allows.
- Out of HubSpot: Quote → Fortnox offer (API), with document number on the quote and deal traceability in Fortnox remarks.
- Into HubSpot: Fortnox order → HubSpot Order (scheduled jobs), matched by Fortnox document number, with optional associations to deal, quote, and company.
- Also shipped (March 20, 2026): CRM webhooks that understand HubSpot’s
object.propertyChangepayload shape for quotes — see the March 20 entry for low-level event keys and compatibility.
Before this work, the integration centered on companies, deals, and invoices. You can now treat the quote → offer → order path as a first-class flow: sales work in HubSpot Quotes, pricing lives in Fortnox offers and orders, and HubSpot Order records reflect Fortnox without duplicating the commercial record only in deals.
- App setting: Enable HubSpot quote to Fortnox offer so the app is allowed to create offers from quotes.
- Quote properties: Create offer in Fortnox (
create_offer_in_fortnox) triggers work; Fortnox offer document number (fortnox_offer_document_number) is written after a successful create. - Triggering: A CRM subscription to
POST …/hubspot_event_subscriptionswhen the trigger property changes (same webhook URL pattern as for companies and deals). - Payload: The app loads the quote with line items, resolves the linked deal and primary company (
fortnox_id), and builds Fortnox offer rows using the same ideas as invoice-from-deal (article, quantity, price, discount, VAT, etc.). - Remarks: Fortnox offer Remarks include
HUBSPOT_DEAL_ID:<dealId>so that when an offer becomes an order in Fortnox, remarks (or equivalent) can still tie the order to the right HubSpot deal.
- App setting: Enable Fortnox orders to HubSpot orders so background work can create or update HubSpot Order records from Fortnox.
- Scheduling: Optional environment
REPEATABLE_JOB_ORDERS_TO_HUBSPOT_PATTERNregisters the repeatable Fortnox order fetch (same convention as otherREPEATABLE_JOB_*cron variables). - Matching: Upsert by
hs_external_order_id= Fortnox document number; name, currency, total, and cancel state map from Fortnox. - Deal / quote / company: If Remarks contain
HUBSPOT_DEAL_ID:…, the order links to that deal and mirrors contact, company, and line item associations. If OfferReference is set, the app can find the HubSpot quote viafortnox_offer_document_numberand associate the order; if the deal is not already known from remarks, the quote’s associated deal is used. With no deal, a company with matchingfortnox_idcan still be linked. - Cancelled (makulerad) orders: Still updated in HubSpot with cancel semantics; deal/quote/company association work is skipped for those.
- Optional HubSpot “Fortnox order” pipeline: A separate app toggle can set
hs_pipeline/hs_pipeline_stageon the HubSpot order from Fortnox status — see Get started — Fortnox order pipeline. The same April 22, 2026 release also documents automatic pipeline recovery on sync if the default pipeline is missing.
- HubSpot OAuth: Portals need scopes that include quotes and orders (in addition to existing CRM objects). If the install predates this work, re-authenticate after deploying.
- Properties: Re-authenticate / post-install flows can create missing quote custom properties (e.g. create offer trigger, offer document number) together with company and deal properties where applicable.
- Webhooks: HubSpot may send
subscriptionType: "object.propertyChange"for quotes. The app supports that alongside legacyquote.propertyChange— see March 20, 2026 — CRM webhooks & technical detail.
- Get started — Create a Fortnox offer from a quote (field-level mapping, CRM card).
- Get started — Syncing Fortnox orders to HubSpot orders (table and association rules).
- Get started — CRM subscriptions & webhooks (one URL, subscription setup).
- Technical event keys and
object.propertyChangenotes: Release notes (March 20, 2026).
Fortnox deal & order pipelines: automatic recovery on sync Change
When you import Fortnox invoices to HubSpot deals or Fortnox orders to HubSpot orders (with the optional order pipeline feature enabled), the app now checks the HubSpot pipeline before processing. If the default pipeline is missing, it runs the same “enable pipeline” flow as the app setting so the job can create or re-link it, then continue.
- Invoices (deals): If import is on but the deal pipeline in HubSpot is missing or not valid, the app attempts the same create/re-enable path as the Fortnox-invoice-pipeline toggle. If the app still cannot match stages (e.g. manual HubSpot changes), the import is skipped and the setting may be turned off, as before.
- Orders: If the Fortnox order order pipeline is enabled in the app but invalid in HubSpot, sync attempts to restore the default Fortnox order pipeline. If you disabled the order-pipeline feature in the app but old pipeline/stage IDs remain stored, the app does not auto-recreate until you re-enable the feature in settings.
📚 Get Started — Syncing invoices to deals · Fortnox order pipeline
Fortnox Way of Delivery: send invoice via API Change
The deal property Fortnox Way of Delivery (fortnox_way_of_delivery) updates the Fortnox customer default invoice delivery before create (when PRINT / EMAIL / PRINTSERVICE) and triggers Fortnox invoice send (GET …/print, …/email, …/eprint, or …/einvoice) after the invoice is created.
- Before
POST /3/invoices: for PRINT, EMAIL, or PRINTSERVICE,PUT /3/customers/{id}withDefaultDeliveryTypes.Invoice(andEmailInvoicewhen EMAIL). E-INVOICE skips this step (same as April 16—configure lev.sätt in Fortnox if needed). - After create: PRINT →
GET …/print, EMAIL →GET …/email, PRINTSERVICE →GET …/eprint, E-INVOICE →GET …/einvoice. - Optional bookkeep (
fortnox_bookkeep_after_create) runs after send, when enabled. - EMAIL uses the company billing email on the invoice as
EmailInformationat create time.
E-invoice and booking
Some Fortnox configurations may require the invoice to be booked before e-invoice send succeeds. If GET …/einvoice fails until the document is booked, enable Fortnox bookkeep after invoice create for that flow or complete send from the Fortnox UI after booking.
Customer default delivery details: April 16, 2026.
Fortnox price lists & multi-currency product prices New Feature
Product sync can read Fortnox price lists and fill HubSpot’s company-currency product price plus optional hs_price_<currency> fields—instead of relying only on the single SalesPrice field on the article.
- The Fortnox integration must include the Pris (price) OAuth scope. Enable it in the Fortnox developer app, then reconnect Fortnox from HubSpot so new tokens include the scope.
- APIs used:
GET /3/pricelistsandGET /3/prices/{PriceList}/{ArticleNumber}per article during product sync.
When list names or codes do not clearly indicate a currency (e.g. “Prislista A”), operators set settings.fortnoxPricelistCurrencyMap on the portal’s token document (Fortnox list Code → ISO currency, e.g. {"A":"SEK","B":"EUR"}). An optional deployment default FORTNOX_PRICELIST_CURRENCY_MAP can be merged in; per-portal settings override by list code.
If you only map some lists (e.g. only EUR), other currencies still fall back to SalesPrice for the primary HubSpot price when no list price applies for the portal’s company currency.
Installations whose Fortnox token does not yet include price keep previous behavior: no price-list calls; primary product price from SalesPrice.
If Fortnox updates list prices without bumping article lastmodified, product sync can miss updates until you enable full article enumeration via FORTNOX_ARTICLE_LIST_IGNORE_LASTMODIFIED (see README / .env.template)—higher Fortnox API load.
- Enable Pris on the Fortnox app and ask customers to reconnect when they need multi-currency list prices in HubSpot.
- Complete
fortnoxPricelistCurrencyMapfor every list code that must drive a currency (no implicit default for unlabeled lists).
Fortnox Way of Delivery (deal) → customer default invoice delivery Improvement
When you create a Fortnox invoice from a HubSpot deal, an optional deal property can align the Fortnox customer’s default invoice delivery with the deal—using the correct Fortnox API fields.
- If Fortnox Way of Delivery (
fortnox_way_of_delivery) is PRINT, EMAIL, or PRINTSERVICE, the app updates the linked Fortnox customer (beforePOST /3/invoices) withDefaultDeliveryTypes.Invoice. For EMAIL, it also setsEmailInvoicefrom the HubSpot company billing email. - E-faktura (
E-INVOICE) is not set via the API: Fortnox’s customer Way of delivery (lev.sätt) uses tenant-specific codes, not the same values as default delivery types. - The app does not send customer
WayOfDeliverywith values likeEMAIL—that caused Fortnox error 2001312 (Ogiltigt leveranssätt) because those strings are not valid lev.sätt codes in Fortnox.
If the customer update fails, logs include Fortnox ErrorInformation, full response body, and the request payload for easier diagnosis.
- Use PRINT / EMAIL / PRINTSERVICE on the deal when you want the customer’s default invoice delivery updated for that run.
- For e-faktura, configure the customer in Fortnox as usual; leave the deal field empty or set only when using the three supported default-delivery values.
Bookkeep after create & credit invoices (deal properties) New Feature Fix
From a HubSpot deal you can optionally bookkeep a newly created Fortnox invoice, or create a kreditfaktura by crediting an existing debit invoice—without building line items for the credit path.
- Fortnox bookkeep after invoice create (
fortnox_bookkeep_after_create) — When Yes, after a successful new invoice create from the deal, the app calls Fortnox to book that invoice. When No, the document is left unbooked (same as before). - Fortnox kreditfaktura (
fortnox_kreditfaktura, values NEJ / JA) — NEJ: create a normal invoice from deal line items. JA: create a credit invoice in Fortnox by crediting the debit document given in the reference field (deal line items are not used for this flow). Values are matched case-insensitively. - Fortnox document to credit (invoice number) (
fortnox_credit_invoice_reference) — Fortnox document number of the debit invoice to credit. Required when kreditfaktura is JA. The resulting document number is written to Invoice number in Fortnox (invoice_number_in_fortnox) after success.
- New invoice:
POST /3/invoicesas today; optionalPUT …/invoices/{id}/bookkeepwhen bookkeep after create is enabled. - Credit invoice:
PUT …/invoices/{debitDocumentNumber}/credit— Fortnox creates the credit document from the referenced debit invoice.
Fortnox may return error 1000031 if bookkeep or credit requests omit a JSON content type. The app now sends Content-Type: application/json (with an empty JSON body) for those PUT calls.
- Use Bookkeep after create only when you want the new invoice booked automatically in Fortnox.
- For credits, set Fortnox kreditfaktura to JA and fill Fortnox document to credit (invoice number) with the debit document number; use the same Create invoice in Fortnox / CRM flow as for a normal invoice run.
- See Get Started — Create an Invoice for full behavior and CRM card notes.
Fortnox PaymentWay (deal property) New Feature
Control which payment method Fortnox uses when creating an invoice—directly from HubSpot deals.
- Fortnox betalsätt (PaymentWay) (
fortnox_payment_way) — Kontant (CASH), Kort (CARD), or Autogiro (AUTOGIRO) sets FortnoxPaymentWay. Use Kort for card (e.g. Diners) instead of default cash. Default/unset omitsPaymentWay.
- Set Fortnox betalsätt to Kort on deals where Fortnox should use card instead of cash.
HubSpot Quotes → Fortnox Offers; Fortnox Orders → HubSpot Orders & CRM webhook compatibility New Feature
For a consolidated product overview of quote → offer and Fortnox order → HubSpot Order (including prerequisites and “why this matters”), see April 22, 2026 — HubSpot Quotes → Fortnox offers & Fortnox orders → HubSpot Orders. This entry keeps the March 20 technical detail: webhook payload shapes, event keys, and scope/install notes as shipped in that release.
End-to-end flow between HubSpot Quotes, Fortnox Offers (offert), and HubSpot Order records: create a Fortnox offer from a Quote, store the document number on the Quote, embed the Deal id in Fortnox Remarks for traceability, then optionally sync Fortnox orders back into HubSpot Orders and associate them to the Deal. CRM property webhooks are aligned with HubSpot’s current object.propertyChange payload shape.
- App setting: Enable HubSpot quote to Fortnox offer so queued jobs are allowed to run.
- Quote properties:
create_offer_in_fortnox(trigger) andfortnox_offer_document_number(filled after a successful create). - Trigger: A CRM subscription to
POST /hubspot_event_subscriptionswhencreate_offer_in_fortnoxbecomes Yes (same endpoint as for companies and deals). - Data: The app loads the Quote with line items, resolves the linked Deal and primary Company (
fortnox_id), and builds a Fortnox Offer (rows mirror the invoice-from-deal logic: article, quantity, price, discount, VAT, etc.). - Remarks: Fortnox Offer Remarks include
HUBSPOT_DEAL_ID:<dealId>so the return path can link a Fortnox order to the right HubSpot Deal when remarks carry over or are set on the order.
- App setting: Enable Fortnox orders to HubSpot orders so background jobs may create or update HubSpot Order records from Fortnox.
- Scheduled fetch: Optional env
REPEATABLE_JOB_ORDERS_TO_HUBSPOT_PATTERNregisters a repeatable job (same pattern as otherREPEATABLE_JOB_*cron variables) to list orders from Fortnox. - Matching: For each Fortnox order, the app looks up or creates a HubSpot Order by
hs_external_order_id(Fortnox document number) and sets name, currency, total, etc. - Association: If Remarks contain
HUBSPOT_DEAL_ID:<id>(as set when the order was created from a Quote), the HubSpot Order is associated to that Deal and related records; otherwise the HubSpot Order is still synced but not linked to a Deal.
object.propertyChange & property values- HubSpot often sends
subscriptionType: "object.propertyChange"withobjectTypeId(e.g.0-14for Quotes) instead of legacyquote.propertyChange/deal.propertyChange/company.propertyChange. The app accepts both normalized event keys for quotes (e.g.objectPropertyChangeCreateOfferInFortnoxalongsidequotePropertyChangeCreateOfferInFortnox) when the quote propertycreate_offer_in_fortnoxchanges. - Deals & companies: The same compatibility applies to
objectPropertyChangeCreateInvoiceInFortnoxandobjectPropertyChangeCreateCustomerInFortnox. - Property values:
propertyValuemay be JSON booleantrueor string"true"for checkbox-style properties.
- Re-authenticate status page: The checklist includes quotes (e.g. Create offer in Fortnox, Fortnox offer document number), not only companies and deals.
- Post-install property creation: Missing HubSpot custom properties can be created for quotes together with companies and deals where applicable.
- Keep a single webhook URL:
POST …/hubspot_event_subscriptions— no URL change required. - Deploy this version so
object.propertyChangepayloads and two-way order flows behave as described. - Grant HubSpot scopes for quotes and orders if not already (re-authenticate when scopes change).
- Read the field mappings in Create a Fortnox Offer from a Quote and Syncing Fortnox Orders to HubSpot Orders, plus CRM subscriptions & webhooks.
📚 Get Started — CRM webhooks · Quote → Fortnox Offer · Fortnox Orders → HubSpot Orders
Cost Center Uppercase Normalization Enhancement
The Fortnox Cost Center field now automatically normalizes input to uppercase for Fortnox compatibility, preventing errors when cost center codes are entered in lowercase.
- The "Fortnox Cost Center" company property (
fortnox_cost_center) – input is now normalized to uppercase when creating customers and invoices in Fortnox. - Case-insensitive input: You can enter values in any case (e.g. "avd1", "Avd1", "AVD1") – the app converts them to uppercase before sending to Fortnox.
- Fortnox expects cost center codes in uppercase; previously, lowercase could cause errors (e.g. "Kunde inte hämta/hitta valuta" or similar).
- On the HubSpot company, set Fortnox Cost Center to any cost center code (e.g. "avd1" or "AVD1").
- When creating a customer or invoice in Fortnox, the app automatically converts the value to uppercase (e.g. "AVD1").
- This applies to both customer creation and invoice creation from deals.
- No more errors from case-sensitive cost center codes in Fortnox.
- Flexible input – users can type in any case.
- Works automatically – no configuration needed.
📚 See Get Started Guide for cost center field mappings.
Amounts Include VAT (Deal property) Enhancement
Opt in to treat HubSpot deal amounts as VAT-inclusive when creating Fortnox invoices, preventing double VAT when your amounts already include VAT.
- A new HubSpot deal property "Amounts include VAT" (
amounts_include_vat) is created and managed by the app. - Default behavior is unchanged – the app does not send
VATIncluded, so Fortnox uses its default (amounts treated as VAT-exclusive, VAT added on top). - When your HubSpot amounts are VAT-inclusive, set the property to Yes – the app will send
VATIncluded: trueso Fortnox does not add VAT on top, preventing double VAT.
- On the HubSpot deal, set Amounts include VAT to:
- No or empty (default) – Original behavior. The app does not send
VATIncluded; Fortnox treats amounts as VAT-exclusive and adds VAT. - Yes – HubSpot amounts include VAT. The app sends
VATIncluded: trueso Fortnox does not add VAT on top.
- No or empty (default) – Original behavior. The app does not send
- When an invoice is created in Fortnox from the deal, the app only sends
VATIncluded: truewhen you explicitly set the property to Yes.
- No breaking change – default behavior is preserved.
- Opt in to prevent double VAT when HubSpot amounts already include VAT.
- Per-deal control for VAT-inclusive amounts.
📚 See Get Started Guide for field mappings between deals and Fortnox invoices.
Invoice vs Delivery Note & Cash Invoice (Deal controls) New Feature
Control whether Fortnox creates a regular invoice, a delivery note, or a cash invoice (kontantfaktura) directly from the HubSpot deal.
- A new HubSpot deal property "Fortnox document type (print template)" (
fortnox_print_template) is created and managed by the app. - The property lets you choose between Faktura and Följesedel when creating a Fortnox document from a deal.
- The property is optional – if you leave it empty, Fortnox uses its own default template (normally invoice).
- A second HubSpot deal property "Fortnox invoice type" (
fortnox_invoice_type) lets you explicitly request a cash invoice (kontantfaktura) when needed.
- On the HubSpot deal, set Fortnox document type to:
- Faktura (value:
st) – standard invoice. - Följesedel (value:
ps) – delivery note.
- Faktura (value:
- Optionally, set Fortnox invoice type:
- Standard invoice (Fortnox default) (value:
INVOICE) – normal invoice type, handled as today. - Kontantfaktura (cash invoice) (value:
CASHINVOICE) – Fortnox creates a cash invoice instead of a standard invoice.
- Standard invoice (Fortnox default) (value:
- When an invoice is created in Fortnox from the deal:
- If the value is
ps, the app sets Invoice.PrintTemplate = "ps" so Fortnox creates a delivery note. - For any other value (including empty), the app does not send
PrintTemplateat all – Fortnox then applies its own default template (normally invoice). - If
fortnox_invoice_typeis set toCASHINVOICE, the app sets Invoice.InvoiceType = "CASHINVOICE" so Fortnox creates a cash invoice. - For
INVOICEor when the field is empty, the app does not sendInvoiceType– Fortnox uses its own default (standard invoice).
- If the value is
- Simple, explicit control over invoice vs delivery note vs cash invoice per deal.
- Respects Fortnox defaults when you do not override template or invoice type.
- Fully compatible with the existing "Create invoice in Fortnox" flow and app settings.
📚 See Get Started Guide for field mappings between deals and Fortnox invoices.
Product Status Sync from Fortnox New Feature
HubSpot product Status (Active/Inactive) is now automatically synced from the Fortnox product registry
- Product Status Mapping: The HubSpot product Status property (
hs_status, values: active/inactive) is now synced from Fortnox articles during product sync - Fortnox Fields: Uses the Active and Expired flags from Fortnox article details
- Automatic Sync: Works with the existing 30-minute product sync - no configuration needed
- Active products in Fortnox appear as Active in HubSpot; inactive or expired articles appear as Inactive
The app maps Fortnox article status to HubSpot's product Status property (hs_status):
- Active in HubSpot: When Fortnox article has
Active = trueandExpired = false - Inactive in HubSpot: When Fortnox article has
Active = falseorExpired = true
This ensures that product availability is consistent between Fortnox and HubSpot. Inactive products in Fortnox will no longer appear as available when creating line items in HubSpot.
- Accurate product availability across both systems
- Inactive or discontinued products are correctly marked in HubSpot
- Works automatically with existing product sync - no setup required
📚 See Get Started Guide for product sync field mappings
Order Number Mapping and Price Handling Improvements New Feature Enhancement
Enhanced invoice and product sync with order number mapping from Fortnox invoices and improved null price handling
- Order Number Mapping: Customer order numbers from Fortnox invoices are now automatically synced to HubSpot deals in the order_number field
- Null Price Handling: Products with null or missing sales prices from Fortnox now default to 0 instead of undefined
- Pipeline Recovery: Improved error handling when creating HubSpot pipelines - automatically recovers from duplicate pipeline errors
When Fortnox invoices are synced to HubSpot deals, the YourOrderNumber field from Fortnox is now automatically mapped to the order_number property on the HubSpot deal.
- During automatic invoice sync, the app reads the YourOrderNumber field from each Fortnox invoice
- This value is stored in the order_number field on the corresponding HubSpot deal
- Perfect for tracking customer purchase orders or reference numbers
- Works seamlessly with existing invoice sync - no configuration needed
Fortnox Invoice:
- DocumentNumber: "1234"
- YourOrderNumber: "PO-2026-001"
- CustomerName: "Acme Corp"
Result in HubSpot Deal:
- invoice_number_in_fortnox: "1234"
- order_number: "PO-2026-001"
- Deal name: "INVOICE 1234 - Acme Corp"
Product sync from Fortnox now handles missing or null sales prices more gracefully by defaulting them to 0.
- Before: If a Fortnox article had a null SalesPrice, the HubSpot product price was set to null/undefined
- Now: Null or missing SalesPrice values automatically default to 0
- Prevents undefined price values in HubSpot
- Ensures consistent data structure
- Works automatically during product sync
Fortnox Article:
- ArticleNumber: "PROD-001"
- Description: "Test Product"
- SalesPrice: null
Result in HubSpot Product:
- hs_sku: "PROD-001"
- name: "Test Product"
- price: 0 ← Defaults to 0 instead of null
- All features work automatically with existing sync processes
- No manual configuration or re-authorization required
- Price defaulting only affects null/missing values - existing prices remain unchanged
- Better order tracking with customer reference numbers flowing from Fortnox to HubSpot
- More reliable product data with consistent price values
- Enhanced data integrity across both systems
📚 See Get Started Guide for more details on invoice and product sync
VAT Support for Line Items New Feature
Automatically include VAT codes for line items when creating Fortnox invoices from HubSpot deals, with automatic enrichment from Fortnox articles
- VAT codes from HubSpot line items are now automatically included in Fortnox invoice rows
- Automatic enrichment: If a line item doesn't have a VAT code, the app automatically fetches it from the Fortnox article (when the line item has a SKU)
- The app uses the tax property on line items, which contains the VAT code synced from Fortnox articles
- VAT is only included when present - if a line item doesn't have a VAT code and the Fortnox article also doesn't have one, the invoice row is created without VAT
- VAT values are automatically trimmed of whitespace for clean data
- When products are synced from Fortnox to HubSpot, the VAT code from the Fortnox article is stored in the product's tax property
- When you add a product to a deal, the VAT code is available on the line item's tax property
- When creating an invoice in Fortnox from a HubSpot deal, the app checks each line item for a VAT code
- If the line item has a tax property: It uses that VAT code directly
- If the line item doesn't have a tax property but has an SKU: The app automatically fetches the Fortnox article and uses its VAT code
- If a VAT code is present (and not empty/null), it's automatically included in the invoice row
- The VAT code is set directly on the invoice row in Fortnox
- VAT codes are automatically synced from Fortnox articles to HubSpot products during product sync (every 30 minutes)
- When you add products to a deal, the VAT code is automatically available on the line items
- If a line item is missing a VAT code, it's automatically enriched from the Fortnox article when creating the invoice
- No manual configuration needed - it works automatically!
- VAT codes are synced from Fortnox articles during the regular product sync (every 30 minutes)
- If a line item doesn't have a VAT code (empty or missing), the app automatically tries to get it from the Fortnox article
- If both the line item and Fortnox article don't have VAT codes, the invoice row is created without VAT - this is normal behavior
- VAT values are automatically trimmed of whitespace to ensure clean data
- This feature works seamlessly with existing invoice creation - no changes to your workflow needed
- VAT codes must match valid VAT codes in your Fortnox system
- Custom line items (without SKU) won't be enriched - they need to have the tax property set manually if VAT is needed
Line item with SKU: "PROD-001"
Line item tax property: "25"
Result in Fortnox Invoice Row:
ArticleNumber: "PROD-001"
VAT: "25"
Price: 199
Quantity: 1
Line item with SKU: "PROD-002"
Line item tax property: (missing)
Fortnox article VAT: "12"
Result: App automatically enriches line item with VAT "12" from Fortnox article
Result in Fortnox Invoice Row:
ArticleNumber: "PROD-002"
VAT: "12"
Price: 299
Quantity: 1
Line item 1: VAT code "25" on line item → Included in invoice
Line item 2: No VAT on line item, but Fortnox article has "12" → Enriched and included
Line item 3: No VAT on line item, Fortnox article has null VAT → Invoice row created without VAT
All line items are handled correctly!
- Accurate VAT handling - VAT codes are automatically preserved from Fortnox articles
- No manual entry required - VAT codes flow automatically from products to invoices
- Automatic fallback - Missing VAT codes are automatically fetched from Fortnox when possible
- Consistent data - VAT codes match what's configured in Fortnox
- Flexible - works with or without VAT codes on line items
📚 See Get Started Guide for more details on invoice creation and field mappings
Remarks Field Enhancements New Feature
Enhanced Fortnox invoice Remarks field with agreement dates, featuring automatic localization based on deal currency
- Agreement Dates: Two new custom properties added to all HubSpot deals: "Agreement Start date" and "Agreement End date"
- Agreement dates are automatically formatted and added to the Remarks field in Fortnox invoices
- Localized formatting: Agreement dates are automatically localized based on the deal's currency code
- Swedish (SEK): "Avtalsstartdatum {date} och slutdatum {date}" - Dates formatted as YYYY-MM-DD
- English (other currencies): "Agreement start date {date} and end date {date}" - Dates formatted as MM/DD/YYYY
- Smart ordering: The Remarks field is built in this order: Agreement Dates → Description
- All fields are automatically created when the app is installed or updated
- Agreement Dates: Add agreement start and/or end dates to any HubSpot deal using the new custom properties
- The system automatically determines the locale based on the deal's currency code
- When you create an invoice in Fortnox from that deal, the content is formatted and included in the Remarks field
- If both start and end dates are provided, they appear together in one text string
- If only one date is provided, only that date is included
- Agreement dates appear before the deal description in the Remarks field
- Open any deal in HubSpot
- Find the new custom properties in the Deal Information section:
- "Agreement Start date" and/or "Agreement End date" - Enter agreement dates
- When you create an invoice from this deal, the content will automatically appear in the Fortnox invoice Remarks field
- The text will be in Swedish if the deal currency is SEK, or English for other currencies
- All fields are optional - invoices work perfectly fine without them
- You can provide just the start date, just the end date, or both agreement dates
- If both agreement dates are missing, no agreement text is added to the Remarks
- Dates are formatted according to the locale (Swedish: YYYY-MM-DD, English: MM/DD/YYYY)
- The fields are automatically created during app installation/update
- All content is synced one-way from HubSpot to Fortnox
- Agreement dates appear before the deal description in the Remarks field when both are present
Deal description: "Monthly subscription"
Agreement Start date: 2025-01-01
Agreement End date: 2025-12-31
Result in Fortnox Remarks:
Avtalsstartdatum 2025-01-01 och slutdatum 2025-12-31
Monthly subscription
Deal description: "Annual service agreement"
Agreement Start date: 2025-01-01
Agreement End date: 2025-12-31
Result in Fortnox Remarks:
Agreement start date 1/1/2025 and end date 12/31/2025
Annual service agreement
The Remarks field is always built in this order: Agreement Dates → Description. Each section is separated by a blank line (double newline) for clear readability. This ensures consistent formatting across all invoices, regardless of which fields are populated.
📚 See Get Started Guide for more details on invoice creation and Remarks field structure
Order Number Sync to Fortnox Invoices New Feature
Sync order numbers from HubSpot deals to Fortnox invoices for better order tracking and reference management
- A new "Order number" custom property has been added to all HubSpot deals
- Order numbers from HubSpot deals are automatically synced to the YourOrderNumber field in Fortnox invoices
- The field is automatically created when the app is installed or updated
- Perfect for maintaining order references between HubSpot and Fortnox
- Add an order number to any HubSpot deal using the new "Order number" custom property
- When you create an invoice in Fortnox from that deal, the order number is automatically included
- The order number appears in the YourOrderNumber field in Fortnox
- Open any deal in HubSpot
- Find the "Order number" field in the Deal Information section
- Enter the order number (e.g., "ORD-12345", "PO-2024-001")
- When you create an invoice from this deal, the order number will automatically sync to Fortnox
- The order number field is optional - invoices work perfectly fine without it
- If the order number is empty or whitespace-only, it won't be included in the invoice
- The field is automatically created during app installation/update
- Order numbers are synced one-way from HubSpot to Fortnox
📚 See Get Started Guide for more details on invoice creation
Billing Email for Fortnox Invoices New Feature
Automatically set billing email addresses on invoices created in Fortnox from HubSpot deals, with automatic sync from Fortnox customers
- A new "Fortnox Billing Email" field has been added to all HubSpot companies
- Automatic sync: Billing email is now automatically synced from Fortnox customers to HubSpot companies every 2 hours
- The app prioritizes the EmailInvoice field from Fortnox, falling back to the Email field if EmailInvoice is not available
- Billing email from the company is automatically included when creating invoices
- Email is set directly on each invoice - perfect for ensuring the right person receives it
- Email syncs automatically during the regular company sync (every 2 hours)
- Uses EmailInvoice field first, then falls back to Email
- Email addresses are automatically trimmed of whitespace
- If both fields are empty in Fortnox, the field won't be set in HubSpot
- You can also manually add/edit the email in HubSpot
- Manual entries work alongside synced values
- Manual changes will be overwritten on next sync (if Fortnox has a value)
- Automatic: Ensure your Fortnox customers have EmailInvoice or Email set - it will sync automatically
- Manual: Open any company in HubSpot, find the "Fortnox Billing Email" field (in Company Information section), and add the customer's billing email address
- When you create an invoice from a deal with that company, the email is automatically set on the invoice
- Only one email address per company is supported
- The field is optional - if left empty, invoices are created as normal
- The app validates the email format to ensure it's valid
- Invalid emails don't prevent invoice creation (logged as warning)
- Email sync runs automatically with company sync every 2 hours
Enhanced Line Item Description Mapping Enhancement Superseded
Major enhancement to improve invoice creation with richer line item descriptions
⚠️ Update: This Feature Has Been Simplified
Line item descriptions have been simplified to use only the product name for cleaner, more consistent invoices.
This release introduced the ability to combine both name and description fields in line items. The feature was later simplified to use only product names for cleaner, more consistent invoices.
During this period, the app combined both name and description fields to create rich, contextual descriptions.
Example: "Premium Hosting - High-performance hosting with 24/7 support"
Intelligent Handling:
- Both fields exist and differ → Combined with " - "
- Only name exists → Uses name only
- Only description exists → Uses description only
- Name equals description → Uses name only (no duplication)
- Both missing → No description field sent
Based on user feedback and to align with standard invoice practices, the feature was simplified in December 2025 to use only product names. This provides cleaner, more readable invoices with consistent formatting.
📚 See Get Started Guide for more details on invoice creation
Deal Owner Information in Fortnox Invoices New Feature
Automatically include HubSpot Deal Owner information in Fortnox invoices for better tracking
The HubSpot Deal Owner's name is now automatically included in the "Our Reference" field when creating invoices in Fortnox. This makes it easier to track which team member is responsible for each deal.
- When a deal is converted to a Fortnox invoice, the system looks up the deal owner in HubSpot
- The owner's full name (First Name + Last Name) is added to the invoice's "Our Reference" field
- If there's no deal owner assigned, the invoice is created normally without the reference
⚠️ Important: New Permission Required
To use this feature, existing users need to re-authorize the app because we've added a new permission scope.
- Re-install the app in your HubSpot portal to grant the new permission
- The new permission is
crm.objects.owners.read(read-only access to owner information) - Once re-authorized, the feature works automatically for all new invoices
- Better invoice tracking and accountability
- Automatic owner information without manual entry
- Seamless integration between HubSpot and Fortnox
- No disruption to existing functionality
- Gracefully handles missing deal owners (continues working normally)
- If the new permission isn't available, invoices are created without the owner reference
- All existing functionality remains unchanged
Need Help?
Have questions about these features or need assistance?
Get Started Guide Contact Support