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 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.

What you get
  • 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.
How Fortnox status maps in HubSpot

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.

How to enable it
  1. In app settings, turn on Fortnox invoice to HubSpot (if not already on).
  2. Under Connection, re-authenticate HubSpot once after this update — the integration needs permission to work with Invoices in your portal.
  3. 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

May 18, 2026

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.

New company property
  • fortnox_customer_type — enumeration on companies with labels Company / Private person and stored values COMPANY / PRIVATE, mirroring the Fortnox customer Type field.
  • For private-person customers, the company domain is intentionally cleared (private persons typically do not have a corporate domain).
New app setting

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)

May 11, 2026

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.

What end users do
  • 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.

📚 Get Started — App cards on CRM records

May 7, 2026

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.

New HubSpot Order custom properties

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 values internal, external, warranty, order
  • fortnox_terms_of_payment — Betalningsvillkor
  • fortnox_your_order_number — PO Number (Fortnox YourOrderNumber)
  • fortnox_invoice_email — invoice email recipient
  • fortnox_delivery_date — Leveransdatum
  • fortnox_way_of_delivery — Leveranssätt
  • fortnox_terms_of_delivery — Leveransvillkor
  • fortnox_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.

Fortnox → HubSpot

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.

HubSpot → Fortnox
  • Header fields: fortnox_terms_of_payment, fortnox_your_order_number, fortnox_way_of_delivery, fortnox_terms_of_delivery, and fortnox_delivery_date are mapped onto the Fortnox order payload when set.
  • YourReference precedence: fortnox_your_reference on the Order overrides the default (first associated contact name).
  • EmailInformation: fortnox_invoice_email on the Order is preferred; falls back to company billing_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

April 30, 2026

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.

How to enable
  • App setting: Enable HubSpot order to Fortnox order.
  • Order properties: create_order_in_fortnox (trigger) and order_number_in_fortnox (written on success). Both are created automatically on (re-)authentication if missing.
  • CRM subscription: a single subscription on POST /hubspot_event_subscriptions handles both order.propertyChange and the modern object.propertyChange payload.
Deal fallback for manually created orders

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.”
Behavior
  • Idempotent: the create is skipped if order_number_in_fortnox is 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/ with OrderRows using DeliveredQuantity (identical to invoice rows).

📚 Get Started — Create a Fortnox Order from a HubSpot Order

April 28, 2026

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.

When PDFs are attached
  • 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. UnpaidPaid in full, UnpaidCredited, UnpaidOverdue), 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.
Where the file lives
  • 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.
Failure handling

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.

📚 Get Started — Invoice PDF attached to the deal

April 22, 2026

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.

At a glance
  • 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.propertyChange payload shape for quotes — see the March 20 entry for low-level event keys and compatibility.
Why this matters

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.

1 — HubSpot Quote → Fortnox offer
  • 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_subscriptions when 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.
2 — Fortnox order → HubSpot Order
  • 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_PATTERN registers the repeatable Fortnox order fetch (same convention as other REPEATABLE_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 via fortnox_offer_document_number and 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 matching fortnox_id can 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_stage on 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.
Prerequisites and operations
  • 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 legacy quote.propertyChange — see March 20, 2026 — CRM webhooks & technical detail.
Where to read next
April 22, 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

April 21, 2026

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.

Behavior
  • Before POST /3/invoices: for PRINT, EMAIL, or PRINTSERVICE, PUT /3/customers/{id} with DefaultDeliveryTypes.Invoice (and EmailInvoice when EMAIL). E-INVOICE skips this step (same as April 16—configure lev.sätt in Fortnox if needed).
  • After create: PRINTGET …/print, EMAILGET …/email, PRINTSERVICEGET …/eprint, E-INVOICEGET …/einvoice.
  • Optional bookkeep (fortnox_bookkeep_after_create) runs after send, when enabled.
  • EMAIL uses the company billing email on the invoice as EmailInformation at 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.

See also

Customer default delivery details: April 16, 2026.

📚 Get Started — Create an Invoice

April 20, 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.

Fortnox
  • 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/pricelists and GET /3/prices/{PriceList}/{ArticleNumber} per article during product sync.
Mapping price list codes to currencies

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.

Backward compatibility

Installations whose Fortnox token does not yet include price keep previous behavior: no price-list calls; primary product price from SalesPrice.

Optional: price-only changes

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.

What you should do
  • Enable Pris on the Fortnox app and ask customers to reconnect when they need multi-currency list prices in HubSpot.
  • Complete fortnoxPricelistCurrencyMap for every list code that must drive a currency (no implicit default for unlabeled lists).

📚 Get Started — Product pricing (multi-currency)

April 16, 2026

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.

Behavior
  • If Fortnox Way of Delivery (fortnox_way_of_delivery) is PRINT, EMAIL, or PRINTSERVICE, the app updates the linked Fortnox customer (before POST /3/invoices) with DefaultDeliveryTypes.Invoice. For EMAIL, it also sets EmailInvoice from 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 WayOfDelivery with values like EMAIL—that caused Fortnox error 2001312 (Ogiltigt leveranssätt) because those strings are not valid lev.sätt codes in Fortnox.
Logging

If the customer update fails, logs include Fortnox ErrorInformation, full response body, and the request payload for easier diagnosis.

What you should do
  • 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.

📚 Get Started — Create an Invoice

April 8, 2026

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.

New HubSpot deal properties
  • 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.
Fortnox API behavior
  • New invoice: POST /3/invoices as today; optional PUT …/invoices/{id}/bookkeep when bookkeep after create is enabled.
  • Credit invoice: PUT …/invoices/{debitDocumentNumber}/credit — Fortnox creates the credit document from the referenced debit invoice.
Fix: Fortnox “Invalid content type” on bookkeep/credit

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.

What you should do
  • 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.

📚 Get Started — Create an Invoice

March 30, 2026

Fortnox PaymentWay (deal property) New Feature

Control which payment method Fortnox uses when creating an invoice—directly from HubSpot deals.

New HubSpot deal property
  • Fortnox betalsätt (PaymentWay) (fortnox_payment_way) — Kontant (CASH), Kort (CARD), or Autogiro (AUTOGIRO) sets Fortnox PaymentWay. Use Kort for card (e.g. Diners) instead of default cash. Default/unset omits PaymentWay.
What you should do
  • Set Fortnox betalsätt to Kort on deals where Fortnox should use card instead of cash.

📚 Get Started — Create an Invoice

March 20, 2026

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.

Direction 1 — HubSpot Quote → Fortnox Offer
  • App setting: Enable HubSpot quote to Fortnox offer so queued jobs are allowed to run.
  • Quote properties: create_offer_in_fortnox (trigger) and fortnox_offer_document_number (filled after a successful create).
  • Trigger: A CRM subscription to POST /hubspot_event_subscriptions when create_offer_in_fortnox becomes 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.
Direction 2 — Fortnox Order → HubSpot Order (and Deal)
  • 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_PATTERN registers a repeatable job (same pattern as other REPEATABLE_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.
CRM webhooks — object.propertyChange & property values
  • HubSpot often sends subscriptionType: "object.propertyChange" with objectTypeId (e.g. 0-14 for Quotes) instead of legacy quote.propertyChange / deal.propertyChange / company.propertyChange. The app accepts both normalized event keys for quotes (e.g. objectPropertyChangeCreateOfferInFortnox alongside quotePropertyChangeCreateOfferInFortnox) when the quote property create_offer_in_fortnox changes.
  • Deals & companies: The same compatibility applies to objectPropertyChangeCreateInvoiceInFortnox and objectPropertyChangeCreateCustomerInFortnox.
  • Property values: propertyValue may be JSON boolean true or string "true" for checkbox-style properties.
HubSpot custom properties & install
  • 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.
What you should do

📚 Get Started — CRM webhooks · Quote → Fortnox Offer · Fortnox Orders → HubSpot Orders

March 13, 2026

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.

What's New?
  • 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).
How It Works
  1. On the HubSpot company, set Fortnox Cost Center to any cost center code (e.g. "avd1" or "AVD1").
  2. When creating a customer or invoice in Fortnox, the app automatically converts the value to uppercase (e.g. "AVD1").
  3. This applies to both customer creation and invoice creation from deals.
Benefits:
  • 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.

March 10, 2026

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.

What's New?
  • 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: true so Fortnox does not add VAT on top, preventing double VAT.
How It Works
  1. 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: true so Fortnox does not add VAT on top.
  2. When an invoice is created in Fortnox from the deal, the app only sends VATIncluded: true when you explicitly set the property to Yes.
Benefits:
  • 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.

March 3, 2026

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.

What's New?
  • 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.
How It Works
  1. On the HubSpot deal, set Fortnox document type to:
    • Faktura (value: st) – standard invoice.
    • Följesedel (value: ps) – delivery note.
  2. 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.
  3. 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 PrintTemplate at all – Fortnox then applies its own default template (normally invoice).
    • If fortnox_invoice_type is set to CASHINVOICE, the app sets Invoice.InvoiceType = "CASHINVOICE" so Fortnox creates a cash invoice.
    • For INVOICE or when the field is empty, the app does not send InvoiceType – Fortnox uses its own default (standard invoice).
Benefits:
  • 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.

February 4, 2026

Product Status Sync from Fortnox New Feature

HubSpot product Status (Active/Inactive) is now automatically synced from the Fortnox product registry

What's New?
  • 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
How It Works

The app maps Fortnox article status to HubSpot's product Status property (hs_status):

  • Active in HubSpot: When Fortnox article has Active = true and Expired = false
  • Inactive in HubSpot: When Fortnox article has Active = false or Expired = 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.

Benefits:
  • 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

January 20, 2026

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

What's New?
  • 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
Feature 1: Order Number from Fortnox to HubSpot

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.

How It Works:
  • 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
Example:
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"
Feature 2: Null Price Handling for Products

Product sync from Fortnox now handles missing or null sales prices more gracefully by defaulting them to 0.

What Changed:
  • 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
Example:
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
Important Notes:
  • 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
Benefits
  • 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

November 19, 2025

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

What's New?
  • 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
How It Works
  1. When products are synced from Fortnox to HubSpot, the VAT code from the Fortnox article is stored in the product's tax property
  2. When you add a product to a deal, the VAT code is available on the line item's tax property
  3. When creating an invoice in Fortnox from a HubSpot deal, the app checks each line item for a VAT code
  4. If the line item has a tax property: It uses that VAT code directly
  5. 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
  6. If a VAT code is present (and not empty/null), it's automatically included in the invoice row
  7. The VAT code is set directly on the invoice row in Fortnox
How to Use It
Automatic Behavior:
  • 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!
Important Notes:
  • 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
Example 1 - Line Item with VAT:
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
Example 2 - Automatic Enrichment:
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
Example 3 - Multiple Line Items:
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!
Benefits:
  • 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

November 3, 2025

Remarks Field Enhancements New Feature

Enhanced Fortnox invoice Remarks field with agreement dates, featuring automatic localization based on deal currency

What's New?
  • 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
How It Works
  1. Agreement Dates: Add agreement start and/or end dates to any HubSpot deal using the new custom properties
  2. The system automatically determines the locale based on the deal's currency code
  3. When you create an invoice in Fortnox from that deal, the content is formatted and included in the Remarks field
  4. If both start and end dates are provided, they appear together in one text string
  5. If only one date is provided, only that date is included
  6. Agreement dates appear before the deal description in the Remarks field
How to Use It
Step-by-step:
  1. Open any deal in HubSpot
  2. Find the new custom properties in the Deal Information section:
    • "Agreement Start date" and/or "Agreement End date" - Enter agreement dates
  3. When you create an invoice from this deal, the content will automatically appear in the Fortnox invoice Remarks field
  4. The text will be in Swedish if the deal currency is SEK, or English for other currencies
Important Notes:
  • 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
Example (Swedish/SEK):
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
Example (English/USD):
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
Remarks Field Ordering:

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

November 3, 2025

Order Number Sync to Fortnox Invoices New Feature

Sync order numbers from HubSpot deals to Fortnox invoices for better order tracking and reference management

What's New?
  • 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
How It Works
  1. Add an order number to any HubSpot deal using the new "Order number" custom property
  2. When you create an invoice in Fortnox from that deal, the order number is automatically included
  3. The order number appears in the YourOrderNumber field in Fortnox
How to Use It
Step-by-step:
  1. Open any deal in HubSpot
  2. Find the "Order number" field in the Deal Information section
  3. Enter the order number (e.g., "ORD-12345", "PO-2024-001")
  4. When you create an invoice from this deal, the order number will automatically sync to Fortnox
Important Notes:
  • 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

October 23, 2025

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

What's New?
  • 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
How It Works
Automatic Sync from Fortnox:
  • 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
Manual Configuration:
  • 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)
How to Use It
  1. Automatic: Ensure your Fortnox customers have EmailInvoice or Email set - it will sync automatically
  2. Manual: Open any company in HubSpot, find the "Fortnox Billing Email" field (in Company Information section), and add the customer's billing email address
  3. When you create an invoice from a deal with that company, the email is automatically set on the invoice
Important Notes:
  • 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
October 20, 2025

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.

Historical Context

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.

Previous Behavior (October 2025 - December 2025)

During this period, the app combined both name and description fields to create rich, contextual descriptions.

How It Worked
Format: "Name - Description"
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
Why It Was Simplified

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

October 17, 2025

Deal Owner Information in Fortnox Invoices New Feature

Automatically include HubSpot Deal Owner information in Fortnox invoices for better tracking

What's New

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.

How It Works
  • 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.

Action Required
  1. Re-install the app in your HubSpot portal to grant the new permission
  2. The new permission is crm.objects.owners.read (read-only access to owner information)
  3. Once re-authorized, the feature works automatically for all new invoices
Benefits
  • Better invoice tracking and accountability
  • Automatic owner information without manual entry
  • Seamless integration between HubSpot and Fortnox
  • No disruption to existing functionality
Technical Details:
  • 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