Fortnox
Shopify

Fortnox + Shopify

Integration documentation and guides

Getting Started · 5How It Works · 7Features · 24Configuration · 14Limitations · 9Troubleshooting · 5FAQ · 10

Getting Started

5

Getting Started

Start with credentials, setup steps, and the key guides for this pair.

Fortnox

oauth2 · Indefinite, unless access is revoked or the user changes

5 minutes
  1. 1

    Create or choose the integration user

    Open Fortnox user administration and create or select the user that will be used for the Junipeer connection.

  2. 2

    Add the required licences

    Ensure the user has licences for Orders, Invoices, Accounting, and Integration.

  3. 3

    Enable the required permissions

    Assign the licences to the user and enable all permissions the integration needs.

  4. 4

    Connect Fortnox in Junipeer

    In Junipeer, click the Fortnox connector, sign in with the prepared user, and approve access.

Screenshots

Swipe to browse screenshots

Shopify

api_key · Never, unless the app is removed or the secret is rotated

10 minutes
  1. 1

    Find the MyShopify domain

    Open Shopify Admin, go to Settings → Domains, and copy the yourstore.myshopify.com address.

  2. 2

    Enable app development

    Go to Settings → Apps, open Develop apps, and continue to Build apps in Dev Dashboard.

  3. 3

    Create the Junipeer app

    Create a new app, name it something like Junipeer, set App URL to https://app.junipeer.io, and enable Embed app in Shopify admin.

  4. 4

    Add the required scopes

    Paste the required scopes (read/write for orders, products, customers, inventory, fulfillments, payments). See the full Shopify Setup guide for the exact scope list.

  5. 5

    Release and install the app

    Release the app, install it on the correct store, and confirm the installation.

  6. 6

    Copy the credentials

    Open Settings inside the app and copy the Client ID and Client Secret for use in Junipeer.

Screenshots

Swipe to browse screenshots

How It Works

7

How It Works

Use sync patterns and architecture notes to understand ownership and flow.

orders

One-wayReal-time (webhook)

Orders are synced from Shopify to Fortnox when created/captured. Junipeer creates an Order in Fortnox, and an Invoice when the order is captured in Shopify.

Orders can be updated and resynced. However, once an Invoice is created in Fortnox (at capture), the invoice CANNOT be modified. This is the #1 source of customer confusion.

products

Both waysEvery 5 minutes

Products can be synced in either direction. Typically ERP→Shopify for price/stock updates, or Shopify→Fortnox for new product creation.

Product numbers in Fortnox have strict character rules: only letters, numbers, _ - / \ + $. No spaces.

inventory

ReverseEvery 5-15 minutes

Stock levels from Fortnox are pushed to Shopify to keep inventory accurate across channels.

If Fortnox Warehouse Module is active and stock is 0, delivered quantity will be forced to 0 by Fortnox API.

customers

One-wayWith order sync

Customer records are created in Fortnox when their first order is synced. Subsequent orders link to the existing customer.

Customer name cannot be empty. Orders without billing address will fail with error 2000637.

refunds

One-wayReal-time

When a refund is issued in Shopify, a Credit Invoice is created in Fortnox and linked to the original invoice.

CRITICAL: Fortnox supports only 1 credit invoice per invoice. A second refund on the same order will fail silently. This must be handled manually.

shipping methods

One-wayWith order sync

Shipping methods from Shopify orders are mapped to Fortnox delivery methods via the shipping method mapping configuration.

If a shipping method mapping is overridden by a default setting, the specific mapping may not apply (see JUN-1388).

payouts

One-wayDaily (recommended 23:00)

Payment provider settlement reports are matched to invoices in Fortnox. Write-offs are created for provider fees.

Requires separate payment provider connector (Shopify Payments built-in, Svea/Klarna/Adyen require additional subscription).

Features

24

Features

Check what is supported, partial, or planned before changing your setup.

bookkeeping

OSS (EU One-Stop-Shop)

Per-country sales account mapping for cross-border B2C sales.

✓ Supported

VOEC (Norway)

Norwegian VAT on e-commerce supported via account mapping.

✓ Supported

VAT rate mapping

Multiple VAT rates per country supported. Must be configured in Fortnox.

✓ Supported

configuration

Custom mapper / rule builder

Advanced field mapping and business rules via the rule builder.

✓ Supported

Shipping method mapping

Map Shopify shipping methods to Fortnox delivery methods.

✓ Supported

Payment method mapping

Map Shopify payment methods to Fortnox payment terms.

✓ Supported

inventory

Stock level sync

Inventory quantities synced from Fortnox to Shopify.

✓ Supported

Multi-location inventory

Supported for basic scenarios. Complex multi-warehouse may need custom config.

~ Partial

orders

Order sync (Shopify→Fortnox)

Orders created in Shopify are automatically synced to Fortnox as Orders + Invoices.

✓ Supported

Invoice creation on capture

Invoice is created when payment is captured in Shopify.

✓ Supported

Order updates & resync

Orders can be updated and resynced. However, once an invoice is created/booked in Fortnox, the invoice cannot be modified.

✓ Supported

B2B order handling

B2B orders detected via company name or VAT/org number. Do NOT use Shopify tags for B2B detection.

✓ Supported

Multi-currency orders

Orders in any currency are supported. Currency must be configured in Fortnox first.

✓ Supported

Historical order backfill

Past orders can be synced using order IDs or date ranges via Export Many.

✓ Supported

payments

Shopify Payments reconciliation

Built into the Shopify connector. No additional subscription needed.

✓ Supported

Klarna reconciliation

Requires separate Klarna connector subscription.

✓ Supported

Adyen reconciliation

Requires separate Adyen connector + webhook setup.

✓ Supported

Svea reconciliation

Requires separate Svea connector subscription.

✓ Supported

products

Product sync (bidirectional)

Products can be synced Shopify→Fortnox or Fortnox→Shopify.

✓ Supported

Price sync

Product prices synced between systems.

✓ Supported

Product creation

New products auto-created in target system.

✓ Supported

refunds

Single refund per order

First refund creates a credit invoice linked to the original.

✓ Supported

Multiple refunds per order

Fortnox only supports 1 credit invoice per invoice. Second refund fails.

✗ Not supported

Partial refunds

Partial refund amounts are supported on the first refund.

✓ Supported

Configuration

14

Configuration

Use the structured settings reference to validate each sync group.

inventory

set_out_of_stockboolean

Set out of stock when 0

Mark product as out of stock in Shopify when Fortnox stock reaches 0.

Default: true

Set to false if you use backorders in Shopify.

orders

sales_account_mappingjson

Sales account mapping (OSS)

Map EU countries to specific sales accounts for OSS compliance. Use 3000-series accounts.

Default: {}

Do NOT use 2000-series (VAT) accounts. Use 3000-series (sales) accounts.

shopify_order_statusesstring

Shopify order statuses to sync

Filter which order statuses to import. Leave empty for all orders.

Setting specific statuses may exclude valid orders if your payment provider uses non-standard status flows.

order_prefixstring

Order number prefix

Prefix added to order numbers in Fortnox (e.g. "SH-")

add_vat_on_rowsboolean

Add VAT on order rows

Whether to include VAT on individual order row amounts.

Default: true

Setting this to false when prices include tax will cause incorrect invoice totals.

vat_includedboolean

VAT included in order rows

Whether prices from Shopify include tax. Must match your Shopify tax settings.

Default: true

order_number_fieldselect

Add order number to Fortnox

Which Fortnox field to store the Shopify order number in. Used for payout matching.

Default: your_order_number

default_terms_of_paymentselect

Default terms of payment

Fortnox payment terms for orders (e.g. 30 days). Can be overridden per payment method.

Default: 30

payment_method_mappingjson

Map payment methods

Map Shopify payment gateway names to Fortnox payment method codes.

Default: {}

shipping_method_mappingjson

Map shipping methods

Map Shopify shipping methods to Fortnox delivery methods.

Default: {}

Default shipping method may override specific mappings if not configured correctly (JUN-1388).

payouts

payout_accountstring

Payout booking account

Fortnox account for payment provider payouts (typically 19xx series).

Should NOT be the same as your bank account. Use a separate interim account (e.g. 1940 for Klarna).

products

create_productsboolean

Create new products

Automatically create products that dont exist in the target system.

Default: true

update_productsboolean

Update existing products

Update product data for already existing products.

Default: true

fields_to_updatejson

Fields to update

Which product fields should be updated during sync.

Default: ["price", "name", "description"]

Limitations

9

Limitations

Review the important constraints and workarounds before troubleshooting.

medium

Shopify tags unreliable for B2B detection

Using Shopify tags to classify B2B vs B2C orders is unreliable. Tags can be modified, removed, or inconsistent.

Impact: Use company name or VAT/org number for B2B classification instead.

medium

Date differences: order date vs booking date

Shopify uses order creation date. Fortnox uses booking date (when invoice is created). These can differ by days.

Impact: Revenue reports between Shopify and Fortnox may not match for the same period. This is expected behavior, not a bug.

medium

Prohibited characters in Fortnox product numbers

Fortnox product numbers only allow: letters, numbers, _ - / \ + $. No spaces. Max 200 characters.

Impact: Products with special characters or spaces in SKU will fail to sync. Clean data in the source system.

medium

Currency must be pre-configured in Fortnox

All currencies used in orders must be added to Fortnox before syncing. Enable automatic exchange rate updates.

Impact: Orders in unconfigured currencies will fail with "Could not find currency" error.

medium

VAT rates must be configured in Fortnox

Only 25%, 12%, 6% are included by default. Additional rates (e.g. for other EU countries via OSS) must be added manually.

Impact: Orders with unconfigured VAT rates fail with "Kunde inte hämta/hitta moms" error.

high

Fortnox 500 invoice line limit

Fortnox API limits invoices to 500 line items. Orders with more than 500 products will fail.

Impact: Very large B2B orders may need to be split or handled manually.

high

Fortnox warehouse module forces 0 quantity

When the Fortnox Warehouse Module is active, items with 0 or negative stock cannot have delivered quantity > 0 via API. Fortnox forces it to 0.

Impact: Invoice line totals become 0. Solutions: disable warehouse module, ensure positive stock, or allow negative balances.

critical

Invoices cannot be modified after booking

Once an invoice is created and booked in Fortnox, it cannot be updated or modified via the API. Orders can be updated and resynced, but invoices are final. To correct a booked invoice, create a credit invoice and re-invoice.

Impact: Customers who edit orders in Shopify after invoicing expect Fortnox to update. The order can be resynced, but the booked invoice remains unchanged. This is the #1 source of support tickets.

critical

Only 1 refund per order supported

Fortnox only allows one credit invoice per invoice. A second refund attempt on the same order will fail silently.

Impact: Multiple partial refunds require manual credit invoice creation in Fortnox.

Troubleshooting

5

Troubleshooting

Follow symptom, cause, and resolution guidance for common failure cases.

medium

Revenue mismatch between Shopify and Fortnox

Symptoms

  • Monthly revenue totals differ
  • Some orders counted in different months

Cause

Shopify uses order creation date, Fortnox uses invoice/booking date. Orders placed late in the month may be invoiced the next month.

Resolution

This is expected behavior. Compare using invoice dates in Fortnox, not order dates. Also check shipping amounts, rounding, and refund timing.

Was this article helpful?

medium

Product sync fails — prohibited characters

Symptoms

  • Specific products fail to sync
  • Error mentions invalid product number

Cause

Product SKUs in Shopify contain characters not allowed in Fortnox (spaces, special characters).

Resolution

Clean product SKUs in Shopify. Allowed: letters, numbers, _ - / \ + $. No spaces. Max 200 chars. Then resync.

SHOPIFY_PRODUCT_CHARS

Was this article helpful?

high

Orders stuck — VAT rate not found

Symptoms

  • Orders fail with "Kunde inte hämta/hitta moms"
  • Only some orders fail (specific countries/rates)

Cause

Missing VAT rate in Fortnox. Default rates are 25%, 12%, 6%. EU OSS requires additional rates per country.

Resolution

Add missing VAT rates in Fortnox → Settings → Accounting → VAT → Create new.

FORTNOX_VAT_NOT_FOUND

Was this article helpful?

high

Invoice amounts are 0

Symptoms

  • Invoice line totals show 0 SEK
  • Products show as delivered quantity 0

Cause

Fortnox Warehouse Module is active and product stock is 0 or negative. The API cannot set delivered quantity > 0.

Resolution

Either: 1) Disable Fortnox Warehouse Module, 2) Ensure all products have positive stock, 3) Enable "Allow negative stock balances" in Fortnox → Settings → Inventory.

Was this article helpful?

critical

All orders failing — permission error

Symptoms

  • No orders sync at all
  • Error: "Lacks authorization for cost centers"

Cause

The Fortnox integration user lacks required licenses or the token has expired.

Resolution

1. Check the integration user has Orders, Invoices, Accounting, Integration licenses. 2. Re-authenticate in Junipeer → Connect Systems → Fortnox.

FORTNOX_COST_CENTER_AUTH

Was this article helpful?

FAQ

10

FAQ

Quick answers to the most common questions for this connector pair.

Why are my orders not appearing in Fortnox?

Check: 1) Is the integration active and the order sync flow running? 2) Does the order status match your filter settings? 3) Check the Junipeer logs for errors. 4) Ensure the Fortnox integration user has all required permissions.

Was this article helpful?

Can I edit an order after it has been synced?

Yes, orders can be updated and resynced. However, once an invoice has been created and booked in Fortnox, the invoice cannot be modified. To correct a booked invoice, you need to create a credit invoice and re-invoice. This is why it is important to verify order details before the invoice is created.

Was this article helpful?

Why do my revenue numbers not match between Shopify and Fortnox?

This is typically caused by date differences. Shopify uses order creation date, Fortnox uses booking/invoice date. These can differ by days. Also check: shipping inclusion, rounding differences, and refund timing.

Was this article helpful?

How do I handle multiple refunds on the same order?

Fortnox only supports 1 credit invoice per invoice. If you need to issue a second refund, create the credit invoice manually in Fortnox. Partial refunds are supported on the first refund.

Was this article helpful?

Do you support multiple currencies?

Yes. All currencies are supported as long as they are configured in Fortnox (Settings → Currency). Enable automatic exchange rate updates.

Was this article helpful?

How do I sync historical orders?

Go to Flows → Export Many. Enter the Shopify order IDs or set a date range. Note: use the long order ID from the Shopify URL bar, not the short order number.

Was this article helpful?

What happens when a payment provider issues a payout?

Junipeer matches each payout line to the corresponding invoice in Fortnox and marks it as paid. Provider fees are posted as write-offs. This requires the order number to be stored in a matchable field (see "Add Order number to Fortnox" setting).

Was this article helpful?

How do I set up OSS (EU One-Stop-Shop) VAT?

In Junipeer settings, go to Sales Account Mapping. Create an entry per EU country with the correct 3000-series sales account. Make sure the corresponding VAT rates are configured in Fortnox. See our OSS guide for details.

Was this article helpful?

Why is the delivered quantity 0 on my invoices?

This happens when the Fortnox Warehouse Module is active and the product stock is 0 or negative. Solutions: 1) Disable the warehouse module, 2) Ensure positive stock balances, 3) Allow negative stock balances in Fortnox settings.

Was this article helpful?

How do I detect B2B orders?

Use the company name or VAT/org number fields, not Shopify tags. Tags are unreliable for B2B detection. Configure the B2B classification rules in the Custom Mapper / Rule Builder.

Was this article helpful?