Get started with Fortnox to HubSpot sync app
This describes the process of how to set up and install the app.
Setup in HubSpot
Note that you also need to buy the Fortnox app on HubSpot marketplace to have the full integration working.
- Search for the Fortnox app in HubSpot Marketplace or click here
- Click on the installation button.
- Select the account you want to use for installing the Fortnox app and click on Choose account.
- Click on Connect app to give the app permission to install the Fortnox app in your account.
- You will then be redirected to the authentication window for Fortnox.
Setup in Fortnox
Important
Note that you also need to buy the Fortnox to HubSpot app on Fortnox marketplace to have the full integration working.
To set up the integration in Fortnox, you need to have SysAdmin rights.
- Enter the username for the Fortnox account to use.
- Enter the password for the Fortnox account to use.
- Click on Godkänn behörighet to give the app permission to install the Fortnox app in your account.
Finish setup
- You have now installed the Fortnox app in your HubSpot account and added it to your Fortnox account.
- A sync will be made within the next 2 hours for the Customer registry from Fortnox into HubSpot Company entities. If it is activated in the App settings
Syncing
Here are the information that are synced for the different entities.
Fortnox to HubSpot
Syncing companies
- Once every second (2) hour a sync is being made for Companies from Fortnox to HubSpot. It includes both creating and updating Companies.
- The check-up for if a Customer exists is the following order name, fortnox_id and then last domain
- To reduce the risk of duplicated companies, make sure your customers are properly named in HubSpot.
| Field HubSpot | Direction | Field Fortnox | Description |
|---|---|---|---|
| Company: fortnox_id | <- | CustomerNumber | Field created by the Fortnox app to keep track of which customer it is related to |
| Company: organization_number_from_fortnox | <- | OrganisationNumber | Field created by the Fortnox app. Swedish organisation number, or for international companies: DUNS number or EU VAT number |
| Company: name | <- | Name | |
| Company: address | <- | Address1 | |
| Company: address2 | <- | Address2 | |
| Company: city | <- | City | |
| Company: zip | <- | ZipCode | |
| Company: phone | <- | Phone | |
| Company: billing_email | <- | EmailInvoice (fallback to Email) | Custom field created by the app for storing a single billing email address. Synced from Fortnox customer's EmailInvoice field (or Email field if EmailInvoice is not available). Used when creating invoices in Fortnox from HubSpot deals. |
| Company: fortnox_cost_center | <- | CostCenter | Cost center code. Synced from Fortnox. Used when creating customers and invoices in Fortnox. Input is normalized to uppercase. |
Syncing products
- Once every 30 minutes a sync is being made for Products from Fortnox to HubSpot. It includes both creating and updating Products.
- The check-up for if a Products exists is the by checking the SKU (hs_sku)
| Field HubSpot | Direction | Field Fortnox |
|---|---|---|
| Product: SKU (hs_sku) | <- | ArticleNumber |
| Product: name | <- | Description |
| Product: description | <- | Description |
| Product: price | <- | SalesPrice |
| Product: Cost of goods sold (hs_cost_of_goods_sold) | <- | PurchasePrice |
| Product: tax | <- | VAT |
| Product: Status (hs_status) | <- | Active, Expired |
Product Status: The HubSpot Status property (hs_status) uses internal values "active" and "inactive". It is derived from Fortnox article flags: when Active is true and Expired is false, the product is set to active. Otherwise it is set to inactive.
Syncing invoices to deals
This feature lets you import invoices from Fortnox and to deals in HubSpot.
First time setup:
If you enable this feature, a new sales pipeline named "Fortnox Invoices" will be created in HubSpot specifically for these invoices.
This pipeline will have four stages: Unpaid, Paid in Full, Unpaid Overdue, and Credited.
Important:
Invoices can only be imported if these conditions are met:
- The "Fortnox Invoices" pipeline and its stages created during first time setup must exist in HubSpot.
- The currency used on the invoice must be part of the current effective currency codes for the HubSpot portal.
- The company listed on the invoice must already be imported as a company in HubSpot.
Mappings:
| Field HubSpot | Direction | Field Fortnox |
|---|---|---|
| Deal: invoice_number_in_fortnox | <- | DocumentNumber |
| Deal: final_pay_date_in_fortnox | <- | FinalPayDate |
| Deal: amount | <- | Calculation: TotalToPay - (TotalVAT + RoundOff) |
| Deal: deal_currency_code | <- | Currency |
| Deal: closedate | <- | DueDate |
| Deal: createdate | <- | InvoiceDate |
| Deal: name | <- | InvoiceType DocumentNumber - CustomerName |
| Deal: description | <- | Comments |
| Deal: order_number | <- | YourOrderNumber |
| Line items: hs_sku | <- | InvoiceRow ArticleNumber |
| Line items: name | <- | InvoiceRow Description |
| Line items: quantity | <- | InvoiceRow DeliveredQuantity |
Syncing Fortnox Orders to HubSpot Orders
When Fortnox orders to HubSpot orders is enabled in App settings, the app can create or update HubSpot Order records from Fortnox orders discovered via the scheduled fetch job (optional env REPEATABLE_JOB_ORDERS_TO_HUBSPOT_PATTERN).
An order is only processed if the Fortnox order Remarks contain HUBSPOT_DEAL_ID:<dealId> (this marker is added when an order is created from a HubSpot Quote).
After the HubSpot Order is created or updated, the app links it to that Deal and adds the same Contact, Company, and Line item associations as the Deal (so the Order mirrors the Deal’s CRM relationships).
Mappings:
| Field HubSpot (Order) | Direction | Field Fortnox | Notes |
|---|---|---|---|
| Order: hs_order_name | <- | DocumentNumber | Format: Fortnox order {DocumentNumber} |
| Order: hs_currency_code | <- | Currency | Defaults to SEK if missing |
| Order: hs_external_order_id | <- | DocumentNumber | Used to find or upsert the HubSpot order |
| Order: hs_total_price | <- | Total | Set when Total is present on the Fortnox order |
| Association: Order ↔ Deal | <- | Remarks | Deal id parsed from HUBSPOT_DEAL_ID:<id> in Remarks |
| Associations: Order ↔ Contacts, Companies, Line items | <- | (via Deal) | Same records associated to the Deal are associated to the Order |
HubSpot to Fortnox
Create an Invoice
When an Invoice is created in Fortnox based on a HubSpot Deal, following fields are mapped. Only a few Fortnox fields are populated to use Fortnox default handling of invoices.
| Field HubSpot | Direction | Field Fortnox |
|---|---|---|
| Deal: deal_currency_code | -> | Currency |
| Company: fortnox_id | -> | CustomerNumber |
| Contact: firstname lastname | -> | YourReference |
| Deal: hubspot_owner_id (firstname lastname) | -> | OurReference |
| Deal: agreement_start_date, agreement_end_date | -> | Remarks (appended before description, localized based on currency) |
| Deal: description | -> | Remarks (appended after agreement dates if they exist) |
| Line item: hs_sku | -> | ArticleNumber |
| Line item: name | -> | Description |
| Line item: quantity | -> | DeliveredQuantity |
| Line item: price | -> | Price |
| Line item: discount or hs_discount_percentage | -> | Discount |
| Line item: calculated (hs_total_discount or hs_discount_percentage) | -> | DiscountType ('AMOUNT' or 'PERCENT') |
| Line item: tax | -> | VAT |
| Company: billing_email | -> | EmailInformation.EmailAddressTo |
| Company: fortnox_cost_center | -> | CostCenter |
| Deal: order_number | -> | YourOrderNumber |
| Deal: fortnox_print_template | -> | PrintTemplate (only when set to delivery note) |
| Deal: fortnox_invoice_type | -> | InvoiceType (only when set to CASHINVOICE) |
| Deal: amounts_include_vat | -> | VATIncluded (only when Yes: true; default: omitted) |
Amounts Include VAT
The app includes a deal property "Amounts include VAT" (amounts_include_vat)
that controls whether HubSpot deal and line item amounts are treated as VAT-inclusive or VAT-exclusive when creating Fortnox invoices.
- Default (empty or No) – The app does not send
VATIncluded; Fortnox uses its default (amounts treated as VAT-exclusive, VAT added on top). This preserves the original behavior. - Yes – HubSpot amounts include VAT. The app sends
VATIncluded: trueso Fortnox does not add VAT on top. Use this when your HubSpot deal amounts already include VAT to avoid double VAT.
Set to Yes only when your HubSpot amounts are VAT-inclusive and you want Fortnox to treat them as such. See Release Notes (March 10, 2026) for more details.
Invoice vs Delivery Note (Print Template)
The app includes a deal property "Fortnox document type" (fortnox_print_template)
that controls whether Fortnox creates a regular invoice or a delivery note when you trigger
"Create invoice in Fortnox".
- Faktura (value:
st) – standard invoice. The app does not sendPrintTemplate; Fortnox uses its default (normally invoice). - Följesedel (value:
ps) – delivery note. The app sendsPrintTemplate = "ps"on the invoice. - If the field is empty or has any other value,
PrintTemplateis omitted and Fortnox applies its own default template.
This means you only explicitly override the template when you select Följesedel; otherwise the invoice follows your Fortnox default configuration.
Standard invoice vs Cash invoice (InvoiceType)
The app also includes a deal property "Fortnox invoice type" (fortnox_invoice_type)
that controls whether Fortnox creates a standard invoice or a cash invoice (kontantfaktura).
- Standard invoice (Fortnox default) (value:
INVOICE) – normal invoice type. The app does not sendInvoiceType; Fortnox uses its configured default. - Kontantfaktura (cash invoice) (value:
CASHINVOICE) – the app sendsInvoiceType = "CASHINVOICE"so Fortnox creates a cash invoice. - If the field is empty or has any other value,
InvoiceTypeis omitted and Fortnox applies its own default type.
Combined with the print template setting, this gives you fine-grained control per deal while still respecting Fortnox defaults when you do not explicitly override them.
⚠️ VAT Configuration Requirement
Important: The VAT percentage sent to Fortnox must match a VAT rate that is configured in your Fortnox account.
How it works:
- The tax property on line items contains the VAT percentage (e.g., "25" for 25%)
- This percentage is sent to Fortnox when creating invoice rows
- Fortnox matches this percentage to a configured VAT rate in your account
- If the percentage doesn't match a configured rate, Fortnox may reject the invoice or use a default rate
To configure VAT rates in Fortnox:
- Go to Settings → Accounting → Predefined Accounts
- Scroll to the VAT section
- Ensure all VAT percentages you use (e.g., 25%, 12%, 6%) are configured
- Common VAT account codes: 2611 (25%), 2621 (12%), 2631 (6%)
Invoice Email Feature
Automatic Email Configuration: When creating invoices in Fortnox from HubSpot deals, the app can automatically configure the invoice to be sent to a specific billing email address.
Syncing from Fortnox:
- The Billing Email field is 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
- Email addresses are automatically trimmed of whitespace during sync
- If both email fields are empty or null in Fortnox, the billing_email field will not be set in HubSpot
Manual Configuration:
- You can also manually add a single billing email address to the Billing Email field on the associated company in HubSpot
- When creating an invoice from a deal, the app validates the email format before adding it to the invoice
- If the email format is invalid, a warning is logged and the invoice is created without email information
- If no billing email is provided, the invoice is created without email information (normal behavior)
- The billing email is set directly on the invoice, not on the customer record in Fortnox
- Only one email address is supported per invoice
Note: The Billing Email field is automatically created during app installation and can be found in the Company Information section. The app validates email format when creating invoices to ensure only valid addresses are sent to Fortnox.
Remarks Field Structure
Remarks Field Ordering: When creating invoices in Fortnox from HubSpot deals, the Remarks field is built in the following order:
- Agreement Dates (if provided, localized based on currency)
- Deal Description (if provided)
Agreement Dates Localization:
- Swedish (SEK currency): "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
- If only start date is provided, only that date is included
- If only end date is provided, only that date is included
- If both dates are provided, they appear together in one text string
Line Item Descriptions
Product Name Only: When creating invoices in Fortnox from HubSpot deals, the app uses only the line item name field for the description in Fortnox.
Behavior:
- If name exists → Uses name only
- If name is missing → No description field sent
Works for both: Existing products (with SKU) and custom line items (without SKU)
Create a Company
The Fortnox to HubSpot sync app allows you to create a company in Fortnox based on a HubSpot company. This feature can be enabled or disabled from the app settings in HubSpot.
| Field HubSpot | Direction | Field Fortnox | Description |
|---|---|---|---|
| Company: address | -> | Address1 | |
| Company: address2 | -> | Address2 | |
| Company: city | -> | City | |
| Company: fortnox_id | -> | CustomerNumber | Field created by the Fortnox app to keep track of which customer it is related to |
| Company: name | -> | Name | |
| Company: organization_number_from_fortnox | -> | OrganisationNumber | Field created by the Fortnox app for getting the Organization Number for easier identification |
| Company: phone | -> | Phone1 | |
| Company: zip | -> | ZipCode | |
| Company: fortnox_cost_center | -> | CostCenter | Cost center code. Normalized to uppercase. Created in Fortnox if it does not exist. Requires costcenter scope. |
Cost Center (fortnox_cost_center)
The Fortnox Cost Center field on companies is used when creating customers and invoices in Fortnox.
Fortnox expects cost center codes in uppercase (e.g. AVD1).
- Case-insensitive input: You can enter values in any case (e.g. "avd1", "Avd1") – the app normalizes them to uppercase for Fortnox.
- Auto-creation: If the cost center does not exist in Fortnox, the app creates it before creating the customer.
- Scope: Requires the
costcenterscope – re-authenticate if you get errors.
Create a Fortnox Order from a Quote
When a Fortnox order is created from a HubSpot Quote, the app maps Quote line items and related deal/company data to Fortnox (same line-row logic as Create an Invoice from a deal).
Enable HubSpot quote to Fortnox order in App settings, and use the Quote properties Create order in Fortnox (create_order_in_fortnox) and Fortnox order document number (fortnox_order_document_number) after a successful create.
Fortnox Order module
Your Fortnox account must have the Order functionality available (licence/module). Otherwise orders cannot be created in Fortnox.
Triggering is done via a CRM subscription to POST /hubspot_event_subscriptions when create_order_in_fortnox becomes Yes (see CRM subscriptions & webhooks). HubSpot may send subscriptionType: "object.propertyChange" with objectTypeId 0-14 for Quotes — the app supports that format as well as legacy quote.propertyChange.
Field mappings (HubSpot → Fortnox Order)
| Field HubSpot | Direction | Field Fortnox | Notes |
|---|---|---|---|
| Company: fortnox_id | -> | Order.CustomerNumber | Primary company on the associated Deal |
| Quote: hs_currency | -> | Order.Currency | |
| Deal: amounts_include_vat | -> | Order.VATIncluded | Sent as true only when set to Yes/true; otherwise omitted |
| (Deal id) | -> | Order.Remarks | Prefix HUBSPOT_DEAL_ID:<dealId> (required for Fortnox → HubSpot Order sync) |
| Quote or Deal: description | -> | Order.Remarks | Appended after the deal-id line when present (Quote description preferred) |
| Contact (from Deal) | -> | Order.YourReference | First associated contact name when available |
| Deal owner | -> | Order.OurReference | From hubspot_owner_id |
| Company: fortnox_cost_center | -> | Order.CostCenter | Uppercased; requires costcenter Fortnox scope |
| Line item: hs_sku | -> | OrderRow.ArticleNumber | When set; article must exist in Fortnox when SKU is used |
| Line item: name | -> | OrderRow.Description | Product name only (same as invoice rows) |
| Line item: quantity | -> | OrderRow.DeliveredQuantity | |
| Line item: price, discount, hs_discount_percentage, hs_total_discount | -> | OrderRow.Price, Discount, DiscountType | Same rules as invoice rows (amount vs percent discount) |
| Line item: tax | -> | OrderRow.VAT | VAT percentage; may be enriched from Fortnox article when missing |
| Quote: fortnox_order_document_number | <- | Order.DocumentNumber | Written on the Quote after Fortnox returns the created order |
Typical requirements
- App setting: HubSpot quote to Fortnox order is enabled.
- Quote: Associated to exactly one Deal; has line items; currencies consistent; no recurring billing on line items (where applicable).
- Company: Associated company has Fortnox ID (
fortnox_id) set. - Optional: Import Fortnox orders into HubSpot Order records is a separate toggle; scheduled polling uses
REPEATABLE_JOB_ORDERS_TO_HUBSPOT_PATTERN— see Release notes (March 20, 2026).
App settings
Within HubSpot there is a few options related to the App.

- Sync Companies
- Toggle if the sync of companies should be active. This is synced every second (2) hour.
- Sync Products
- Toggle if the sync of products should be active. This is synced every 30 minutes.
- Fortnox invoice to Deal pipeline
- Toggle if the scheduled import of Fortnox invoices to HubSpot deals should be active.
- HubSpot deal to Fortnox invoice
-
Toggle to allow/disallow Fortnox invoices to be created based on HubSpot deal.
Important note!
A CRM subscription should callPOST /hubspot_event_subscriptionswhen deal property Create invoice in Fortnox changes (HubSpot may sendobject.propertyChangeordeal.propertyChange). If "HubSpot deal to Fortnox invoice" is enabled and that property equals Yes, an invoice will be created in Fortnox when requirements are met. The result can be viewed in deal record Activities if included in filters. - HubSpot company to Fortnox customer
- Toggle to allow/disallow Fortnox customers to be created based on HubSpot company.
- HubSpot quote to Fortnox order
-
Toggle to allow Fortnox orders to be created from HubSpot quotes when quote property Create order in Fortnox is set to Yes. Requires a CRM subscription to
/hubspot_event_subscriptions; see Create a Fortnox Order from a Quote. - Fortnox orders to HubSpot orders
-
Toggle to sync Fortnox orders into HubSpot Order records (and associate to deals when Remarks contain the deal reference). See Syncing Fortnox Orders to HubSpot Orders. Optional scheduled polling uses
REPEATABLE_JOB_ORDERS_TO_HUBSPOT_PATTERN; see also Release notes. - Re-authenticate HubSpot and Fortnox
- Option to re-authenticate HubSpot and Fortnox option if e.g. scopes have changed. Opens a popup with a button that opens the authentication process in a new window. The status view lists custom properties for companies, deals, and quotes. Once finished the popup can be closed.

CRM subscriptions & webhooks
Property-based automations use HubSpot CRM subscriptions with a single target URL on this app:
POST https://<your-app-domain>/hubspot_event_subscriptions
Subscribe to property changes for:
- Company —
create_customer_in_fortnox - Deal —
create_invoice_in_fortnox - Quote —
create_order_in_fortnox
HubSpot’s payload may use "subscriptionType": "object.propertyChange" and "objectTypeId" (e.g. 0-14 for quotes) instead of older types like quote.propertyChange. The integration accepts both. Responses: 204 when a job was queued, 200 with { "message": "No event was triggered." } when nothing matched (e.g. wrong property or value not Yes).
Release notes (March 20, 2026) describe this in detail.
In the right sidebar of company records, there's a CRM card showing the "Organization number from Fortnox" and "Fortnox ID" for the connected Fortnox customer.
If the company isn't linked to a Fortnox customer, you can create one by clicking the "Create as customer in Fortnox" button, provided following conditions are met.
1. App Setting
- Ensure that the "HubSpot company to Fortnox customer" app setting is enabled.
2. Company Information
- The "Organization number from Fortnox" field for the HubSpot company is known.
- The "Fortnox ID" field for the HubSpot company must be unknown.
- There should be no existing customer in Fortnox with the same organization number.
On the right sidebar of deal records, there's a CRM card showing the "Invoice number in Fortnox" for the connected Fortnox invoice.
If the deal isn't linked to a Fortnox invoice, you can create one by clicking the "Create as invoice in Fortnox" button, provided following conditions are met.
1. App Setting
- Ensure that the "HubSpot deal to Fortnox invoice" app setting is enabled.
2. Deal Information
- The "Invoice number in Fortnox" field for the HubSpot deal must be unknown.
- The deal's currency must exist in Fortnox.
- The deal must be associated with a company.
3. Company Information
- The associated company's "Organization number from Fortnox" is known.
4. Line Items
- The deal must have at least one line item.
- All line items must use the same currency.
- None of the line items can have recurring billing frequency.
- Line items with SKUs must correspond to articles existing in Fortnox.
- Allowed characters for SKUs include letters, underscores, hyphens, and slashes.
- If line items have VAT (tax property), the VAT percentage must match a configured VAT rate in Fortnox (see VAT Configuration Requirement below).