1.Introduction

This is the manual for the integration between Shopify and Billit.

This integration ensures that orders from the Shopify webshop are automatically processed to invoices in Billit. Because the orders arrive directly in the retailer's accounting system, this saves time on the financial administration.

Are you using the Shopify POS then the sales from this POS of one day can be placed as one daily invoice in Billit. This option can be requested via webcare@webwinkelfacturen.nl. Additional costs are associated with this option.

Please pay special attention to the following
  1. This integration is a financial integration. It is not a logistics integration. The integration is not suitable for updating customers in Billit, printing packing slips, or synchronizing products/inventory. The integration works only with the payment status in the Shopify order, where you can configure which statuses should trigger forwarding the order (for example 'processing', 'paid' / 'refund'; multiple statuses are possible).
  2. An order is forwarded to Billit only once. Changes made after the order has been forwarded will not be applied in the accounting system. Any adjustments must therefore be handled via the refund process in Shopify or updated manually in Billit.
  3. This integration does not replace the work of an accountant. It saves time because you no longer have to retype documents. The accountant is still needed for advice, expertise, and control.
  4. Tip: Other customers using this integration found the tips in the FAQ for Shopify and in the FAQ for Billit.
Read more Introduction .... Read less Introduction ....

Install integration
You install this integration from the Shopify App store. If you search for webwinkelfacturen, our apps will appear automatically. You can recognize us as a supplier by the blue gear icon. If you click on the App, you will see a description and the Add app button. Upon activation, you will be automatically guided through the configuration screens.

When you click the Add app button, you must first authorize the integration to read and possibly even write data from your webshop. This is indicated in the next screen. You also need to approve the monthly fee for the integration. Once you have approved the monthly fee, the connection with Shopify is established and you will be automatically redirected to your personal dashboard.
The installation is complete when both connection dots are green, and the settings in the Configuration tab have been entered and saved.

Important: Once the integration is installed, always log in to the dashboard via https://uwkoppeling.webwinkelfacturen.nl, and not via the appstore

There is a 30-day free trial.

The integration is a real-time integration. Once an order has reached a certain status, it will be processed to your accounting system as quickly as possible.

If you want to install another integration, you can do so in the same way. Make sure you are logged out of the integration dashboard and preferably start the new installation in an incognito browser.

Cancel integration
If you want to terminate the integration, you can simply remove the app from the app store in your backend.

Are you switching to another accounting system and want to create a new integration? You can install the new app from the app store in your backend. Make sure you are logged out of the dashboard of the old integration and preferably start the new installation in an incognito browser.

Are you switching to another webshop system? Via our integrations page you can see whether you install it from the relevant app store, or by means of an installation link.

Has the installation been successful, but do you see in the dashboard of the integration the old license key still present when you click the dropdown arrow next to the key (even though that app/key has been deleted)? If so, please send us an email requesting that the old key be removed.

2.How the integration works

An order from the Shopify webshop is processed to an Billit invoice. It is possible to ensure that the Billit invoices refer to a product in Billit. We call this posting to products. This can be requested via webcare@webwinkelfacturen.nl.

Shopify works with webhooks. We receive a notification whenever a new order is created in your webshop or when an order is changed. If the order order can be processed—this depends on the status—the integration places the order order in the processing queue. Depending on the processing queue's volume, the order will be processed quickly or slightly later. Generally, queues move quickly.

In addition to the webhooks, a sweep is done daily. This means that the integration checks daily whether all webhooks have been received correctly. If any webhooks are missed, those orders are still retrieved and forwarded.
Read more How the integration works .... Read less How the integration works ....

When processing daily revenue, the integration creates a daily invoice with the sales of the previous day. This can be split by VAT rates or based on categories.

Note: Foreign orders are never part of the daily invoice. Foreign orders are orders delivered outside the country of the webshop. If a daily invoice is chosen, payments can no longer be processed separately. That option will no longer be available.

Pre-check orders
At the start of processing an order, we perform a number of checks on the Shopify order:
  • It is checked whether the total of the Shopify order is equal to the sum of the amounts in the order lines plus the shipping cost amount.
  • If the order is an ICP order, the VAT number is checked.
  • It is checked whether a corresponding VAT code exists in Billit for the VAT in each line.
  • It is checked whether the order has not already been processed.

Processing orders
Upon a successful check, the Billit invoice is created and processed to Billit. The debtor data is placed in the Billit invoice. Billit itself checks if the debtor is already present. One can choose to also add the products from the order. This option can be requested from us.

Post-check
After the order has been forwarded and a success message from Billit has been received, the order is marked as handled. The Shopify order appears at the Reporting tab on the dashboard.

If Billit returns an error while processing the order, the order appears in the Errors tab on the dashboard. Via the yellow button More info more information about the problem can be found. Via the red button Report problem can the order with all necessary information easily be submitted to us after you have tried to resolve the problem yourself. If the problem is solved, in some cases the orders can be processed again with the blue Process button.

Data
Information about the data that is processed can be found in the section Day-to-day: To Billit later in the manual.

3.Installation

After installation, check using this FAQ, whether the integration works.

You install the integration between Shopify and Billit from the Shopify App store. First, the connection with your webshop is established and you authorize the integration to read data from your webshop.

Activating the integration now continues with:
1. Accepting the terms and conditions.
2. Establishing the connection with Billit. This authorizes the integration to write transactions to your Billit administration and read information.
3. The configuration itself.
Read more Installation ....Read less Installation ....

Accept terms and conditions
Before the integration can be used, the terms and conditions must first be accepted. The terms and conditions are based on the general ICT Terms and Conditions (industry organization) and the general GDPR guidelines.

Authentication Billit
The authentication with Billit runs via OAuth. Make sure you are logged out of Billit before starting the connection. You now click on the red Connect button. A login screen for your Billit account will automatically appear. When you log in, you will get a screen asking if you allow the connection. If you confirm this, the connection with Billit is established.

If you want to re-establish the connection at a later moment, you can always do so by clicking the Connect button.

Processing status
You can specify which statuses orders should be processed to Billit. You can select multiple statuses. The integration will never forward orders twice. The integration is protected against this.

Invoice layout Billit
It is possible to link an invoice layout to the invoice in Billit. At this moment, the templateID of the layout must be entered. At a later stage, the integration will show a list of available invoice layouts. This functionality is under development.

Payment status Billit
It is possible to provide the payment status to Billit invoices. The options are always set to paid, never set to paid, or set to paid depending on the status in the webshop. If you choose the last option, it concerns the payment status at the time of processing. If the payment status in the webshop changes at a later moment, the invoice in Billit will not be updated.

Configure VAT rates and general ledger accounts
When processing to the Billit accounting system, the VAT percentages are transferred directly. Therefore, there is no possibility to post to separate VAT codes or ledger accounts.

4.Day-to-day: From Shopify

Processing schedule: Shopify works with webhooks. We receive a notification as soon as a new order is created in your webshop or if an order changes. If the order can be processed - this depends on the status - then the integration places the order in the processing queue. Depending on the activity in the processing queue, the order is processed quickly or slightly later. In general, the queues move quickly.

Once an order has been processed, it cannot be processed again. Any order changed in the webshop after it has been processed will not be updated in Billit.

The integration performs an extra check for orders in the Shopify webshop that are loaded from Bol.com or Amazon. This loading happens via an external app that the Shopify merchant can enable. For these imported orders, the integration performs an extra check whether the VAT is present in the order. If not, the order will not be processed. See our FAQ for more information.

Old orders processing
It is possible to process orders that are already in the Shopify webshop via a migration. You can request this via webcare@webwinkelfacturen.nl. We ask a modest fee for this. We cannot process orders from more than two years ago.
Note: Because the Shopify integration works with webhooks, you should not import orders retroactively in your Shopify webshop after activating the integration. If you do this and for example import 500 orders at once or change the status of 500 orders, our platform will receive all these changes and start processing them. This creates a disproportionate load on our network.

Processing daily revenue
When processing daily revenue, the integration retrieves the receipts from the previous day from the POS system in the morning. The integration combines these receipts into one daily invoice and places it in Billit.

Refunds
If you want the integration to process refunds in addition to orders, you can enable the status refund or partially_refunded in the Configuration tab under Status process sales. Refunds must be created correctly in Shopify, meaning the refund must be applied to the order lines. Unfortunately the integration cannot process a refund that only contains an amount. For more information see: FAQ.

Please note: For refunds, the integration goes back a maximum of 30 days in time. Also, the integration only processes a refund if the integration has previously processed the order to which the refund relates.

Please pay special attention to the following
The integration will not read or pass many fields from a Shopify order to Billit. In particular, the note_attribute fields and the custom fields are not included. This is because different webshops use these fields differently. Because our integrations must work for all webshops, we cannot configure this for individual merchants.

Pay special attention to fields that are added via a plugin. There is a significant chance that the integration will not process these fields.

Field-level specification orders
Specification Shopify order. +-
Below is an elaboration at field level when retrieving orders. The general values in the order and the order rules are discussed, the shipping costs and the debtor details.
Name field Values from Shopify order
Order-identifier [id]
Order number Is determined as follows:
  1. If the merchant has filled in a default prefix, the order number starts with this prefix. Shopify retailers use these prefixes to distinguish between different webshops if they sell from multiple webshops. The prefixes are NOT intended to make a distinction in years.
  2. The [order_number] field is added
  3. If the field [name] is filled in the order and the value of [name] is not part of the field [order_number] then - [name] is added to the order
  4. Example: If a prefix WW1- is set, and the order [order_number] has 5374 and [name] BOL - 1234567 then the full order number becomes WW1-5374 - BOL - 1234567.
Invoice number Is determined as follows:
  1. If for the Shopify merchant it is set that the Payment-id must be used, then the invoice number is set equal to the payment-id. This option can be used, for example, to pass the Mollie transaction ID from the order to the accounting system.
  2. In all other cases, the invoice number is set equal to the Shopify checkout-id
Booking date [created_at]
Order date [processed_at]
Status order [financial_status]
Payment status if the status of the order is paid then paid, otherwise no payment status
Payment reference [order_number]
Affiliate number Is determined as follows
  1. If present, the payment_id from the [transactions] of the Shopify order is used
  2. If this payment_id is present, it is checked whether a reference to a Bol occurs anywhere in the note_attributes of the order and the value stated there is added to the affiliate number. The latter is often not necessary because the Bol reference also appears in the [name] of the order.
Valuta [currency] if present
Payment method field [gateway] in [transactions]
Order total incl. VAT and discounts [total_price]
Total VAT order incl. discounts Value in [total_tax], or, if that value is 0, the value from [current_total_tax]. When using [current_total_tax], there's an additional check. The VAT lines in the order must add up to the value in [current_total_tax].
Order total excl. VAT and discounts Difference between the two lines above
ICP indication The integration determines as follows whether it concerns an ICP order:
  • If the merchant has configured a margin, it is never an ICP order
  • If the delivery address is known, the country from the delivery address is used to determine whether it is an ICP order. If the delivery country is not known, the country in the billing address is used.
  • If the country is not an EU country, then it is not an ICP order
  • If the country is the same as the country of the webshop, it is not an ICP order. Therefore, an order to a Dutch address from a Dutch webshop is never an ICP order. Likewise, an order to a Belgian address from a Belgian webshop is also never an ICP order.
  • If the order total equals 0, it is never an ICP order. The reason is that with a 0-euro order it cannot be determined why the order has 0-euro VAT — whether it is because it is ICP or not. For ICP orders a VAT number is mandatory. To avoid this additional restriction, the integration determines that ICP does not apply to a 0-euro order.
  • If the VAT is not equal to 0, with or without discount, then it is never an ICP order
  • In all other cases it is an ICP order.
International indication The integration determines as follows whether it concerns an international order:
  • If the delivery address is known, the country from the delivery address is used to determine whether it is an ICP order. If the delivery country is not known, the country in the billing address is used.
  • If the country is an EU country, then it is not an international order
  • If the integration has a separate VAT configuration for the country, it is not an international order. This applies for example to countries such as Norway, Switzerland and the United Kingdom.
  • If the order total equals 0, it is not an international order. For 0-euro orders the integration cannot calculate VAT correctly.
  • If the VAT is not equal to 0, with or without discount, then it is not an international order
  • In all other cases it is an international order.
Discounts
Discounts are determined as follows:
  • For all lines, the discounts are added together and the shipping cost discount is also added
  • This amount is compared with the total discount on the order - field [total_discounts]
  • An extra discount line is added with the difference between the above values if this difference is not equal to 0
  • Subsequently, all discount rules are grouped per VAT percentage and the VAT codes / accounts from Billit are determined.
Specification Shopify order lines. +-
To read the order lines, the integration retrieves the [line_items] field. Multiple order lines can be included in the order, and the integration reads these lines one by one.
Name field Values from Shopify order line
Productid [product_id]
categoyid Category associated with the product
Amount [quantity]
SKU [sku]
Description [name]
VAT percentage The VAT percentage is determined as follows:
  • If the field [tax_exempt] in the order has the value 1, then no VAT is charged.
  • If the field [taxable] in the order line has the value 0 or is empty, then no VAT is charged.
  • If the line price after applying a possible discount equals 0 — meaning a free product — then the VAT percentage used is the one listed in [tax_lines]. In practice [tax_lines] usually consists of one line.
  • If the amount in the line is not equal to 0, the VAT percentage is only used if the VAT amount in [tax_lines] is not equal to 0. If the VAT amount equals 0, a VAT percentage of 0% is used for this order line.
Amounts excl. VAT The amounts excluding VAT are determined as follows:
  • If the webshop uses prices excluding VAT, then the line price excluding VAT equals [price]
  • If the webshop uses prices including VAT, then the line price excluding VAT equals [price]/(1 + VAT percentage)
  • For unit prices, meaning prices per item, the line price is divided by the value in the field [quantity]
Amounts incl. VAT The amounts including VAT are determined as follows:
  • If the webshop uses prices including VAT, then the line price including VAT equals [price]
  • If the webshop uses prices excluding VAT, then the line price including VAT equals [price] * (1 + VAT percentage)
  • For unit prices, meaning prices per item, the line price is divided by the value in the field [quantity]
Discount in order line The discount in the order line is determined as follows:
  • If the field [total_discount][ in the line has a value not equal to 0, that value is used as the line discount.
  • Otherwise the integration checks the values in [discount_allocations] and uses the sum of the fields [amount] in those lines as the discount.
  • For discounts, the inclusive/exclusive VAT handling depends on the webshop settings. Using the VAT percentage, the correct amounts for discounts including and excluding VAT are calculated.
VAT code and accounts Billit These are determined based on the settings, the VAT percentage and the delivery country. This also takes into account whether it is an ICP or international order. When processing by categories, the revenue account of the category is used. This can be set via the dashboard.
Specification Shopify shipping costs. +-
To read the shipping costs, the integration uses the field [shipping_lines]. There can be multiple shipping lines. For the name and VAT percentage only the first line is used, while the amounts from all shipping lines are summed. In most cases there will be only one shipping cost line.
Name field Values from Shopify order line
Description [title] from the first shipping cost line
VAT percentage Sum of the values in field [rate] from the [tax_lines] in the first shipping cost line.
Shipping costs excl VAT The shipping costs excluding VAT are determined as follows:
  • If the webshop uses prices excluding VAT, the shipping costs excluding VAT equal the sum of the fields [price] in the shipping lines.
  • If the webshop uses prices including VAT, the shipping cost excluding VAT equals the sum of the fields [price]/(1 + VAT percentage) in the shipping lines.
Shipping costs incl VAT The shipping costs including VAT are determined as follows:
  • If the webshop uses prices excluding VAT, the shipping costs excluding VAT equal the sum of the fields [price] in the shipping lines.
  • If the webshop uses prices incl. VAT, the line price incl. VAT is equal to the sum of the fields [price] * (1 + VAT percentage) in the shipping lines.
VAT code and accounts Billit These are determined based on the settings, the VAT percentage and the delivery country. It also takes into account whether it is an ICP or international order.
Specification Shopify customer. +-
Name field Values from Shopify customer
Email If present [email] otherwise [contact_email]
Invoice address If present based on [billing_address] in the Shopify order
  • First name - [first_name]
  • Last name - [last_name]
  • Company name - [company]
  • Addressline1 - [address1]
  • Addressline2 - [address2]
  • Zipcode - [zip]
  • Phone nr - [phone]
  • City - [city]
  • Iso-countryode - [country_code]
  • Country - is calculated based on the iso country code
If there is no billing address and there is a shipping address, then the billing address is set equal to the shipping address.
If there is no billing address and no shipping address, the information in [customer] and [customer][default_address] is checked.
Shipping address If present based on [shipping_address] in the Shopify order
  • First name - [first_name]
  • Last name - [last_name]
  • Company name - [company]
  • Addressline1 - [address1]
  • Addressline2 - [address2]
  • Zipcode - [zip]
  • Phone nr - [phone]
  • City - [city]
  • Iso-countryode - [country_code]
  • Country - is calculated based on the iso country code
If there is no shipping address, so [shipping_address] does not appear in the order, the shipping address remains empty.
VAT number The VAT number is determined as follows:
  • The list [note-attributes] is read per line. If the name equals vatnumber, vat_number, vatnr, vat_nr, vatid, vat-id, vat_id or Vat Registration Number, the value in that line is used as the VAT number.
  • If no VAT number is found, the integration checks the information in [customer][note]. If the value in [customer][note] has a maximum length of 34 characters and the first two letters match the first 2 or 3 characters of [customer][note], then that value is used as the VAT number. Note: Greece uses a different country code, namely EL. This is taken into account in this step.
  • If the VAT number is still not found, the integration checks whether the value in [customer][note] starts with the text vat registration number. If so, the text after : is taken as the VAT number.
  • If no VAT number is found, the integration checks the information in [note]. If the value in [customer][note] has a maximum length of 34 characters and the first two letters match the first 2 or 3 characters of [customer][note], then that becomes the VAT number. Please note: A different country code applies to Greece, namely EL. This is taken into account in this step.
  • If a VAT number is found in one of the above steps, the integration checks its validity via the VIES validation service. If it is a valid VAT number it will be used, otherwise the VAT number remains empty.

5.Day-to-day: To Billit

Below is the creation of new Billit invoices elaborated at field level. It is possible to post to products in the Billit invoice. We then include the Billit product ID in the invoice. You can request this via webcare@webwinkelfacturen.nl stating your license key.

Creating invoices
When creating invoices, the customer information is placed in the invoice. Therefore, no separate customer is created. Billit handles the matching of the debtor data with already existing debtors in Billit itself.

Create debtor
When processing customer information, all data is provided in the sales transaction and Billit will process it further.

Create products
Products are only created if this is configured in your contract. The integration first checks whether the products from the order already exist in Billit. If not, the integration adds the missing products. The rules for matching products between Shopify and Billit can be found in this FAQ read here.

Regarding VAT, the integration follows the VAT percentage in the order.

Automatically sending invoices
The integration creates the invoice in Billit, but will not automatically send the invoice to the debtor. It is possible to set an invoice layout. This can be done via the dashboard https://uwkoppeling.webwinkelfacturen.nl, tab Configuration.


Field-level specification Billit

Field-level specification of the Billit invoice. +-
Billit factuur
Name Example Note
OrderDate 2022-12-02T20:23:29+01:00 order date
ExpiryDate 2022-12-16T20:23:29 order date + 14 days - the 14 days is not adjustable.
OrderType Invoice Type, in case of negative order Credit invoice.
OrderTitle 1050 Order number, upon request order or invoice number
OrderDirection Income
TotalExcl 97.98 Quantity * unit prices excl. VAT
TotalIncl 103.85 Quantity * unit prices incl. VAT
TotalVat 5.87 VAT
PaymentReference 1050 Order number
Created 2023-01-20 current date
Invoice lines
Quantity 2 Amount
Description Monthly settings check Description
VATPercentage 6.00 VAT percentage
UnitPriceExcl 20.7075 Unit prices excl. VAT
UnitPriceIncl 21.9500 Unit prices incl. VAT
TotalExcl 41.4151 Quantity * unit prices excl. VAT
TotalIncl 43.9000 Quantity * unit prices incl. VAT
TotalVAT 2.4849 VAT
Currency EUR The currency of the order. This option is disabled by default. You can contact us if you would like to use this feature.
InclLeading true Including VAT leading, this is not adjustable.
Product-id Product identifier from Billit Only if configured that products should be processed.
Customer
First name Sophie
Last name Fischer
Address Stationstraat
House number 12
Postal code 1000AA
City Amsterdam
CountryCode NL
Email info@sponiza.nl
Phone number 31623138822
Name Sophie Fischer Company name if present, otherwise first and last name.
Invoice shipping address - please note, the shipping address is an additional address for the customer in Billit
Address type DeliveryAddress
Name Marietje Geuze
Address Heesterstraat
House number 1
Postal code 3512KL
City Utrecht
CountryCode NL
Paid 1
Field-level specification of the Billit product. +-
Name Example Note
Reference [Reference] The reference of the product in Billit. This reference is available after we have retrieved or potentially added the product.
Description [Description]
Price excl. VAT [unitpriceExcl]
Product VAT [VAT]
Amount incl. VAT [unitpriceIncl]
Created Current date
Last modified Current date

6.Support

We believe it is important that you as online retailer have direct access to information about the integration whenever you want. That is why every customer has a personal dashboard.
Read more Support .... Read less Support ....

Persoonlijk

Explanation tabs dashboard

On the Dashboard >> Report you can see which orders from your Shopify webshop, and when, have been transferred to Billit.

At Dashboard >> Errors you can see which orders have not been processed. Via the blue Process button you can (re)submit the order. Via the red Report problem button you can create a ticket with us.

At Dashboard >> Open the orders are listed that have not yet been processed because they do not yet have the correct status in the webshop. Every night jobs run to review the status again and still process the order.

At Dashboard >> Configuration the settings of your integration are listed. You can adjust the settings there.

At Dashboard >> Profile invoices are available for download. You can also specify an additional email address here for sending emails and stop the integration.

What if orders are missing in Billit

If orders are missing in Billit we recommend following the steps below:
  1. Log in to the dashboard: https://uwkoppeling.webwinkelfacturen.nl. The username and password are included in the registration email.
  2. Go to the Errors tab and check if order is there. You may need to adjust the search period if the order is from a previous month. If you find order in this overview:
    1. Check the error code and verify whether you can resolve it yourself.
    2. If yes resolve the issue and click the blue Process button to resubmit the order.
    3. If not use the red Report problem button to create a ticket with us.
    4. Note if there are multiple errors, please create only 1 or 2 tickets. We will automatically see the other issues.
  3. Go to the Report tab and see if order is listed there. If so, you'll often see an identifier for Billit (in the purple section of the overview) that you can use to search for order.
  4. Go to the Open tab and check if order is there.
  5. If you cannot resolve the issue, you can always create a ticket via the green Ask us button.

You can send any other questions or comments to webcare@webwinkelfacturen.nl. For a quick response, please always include the license key and as much information as possible. If you encounter any problems during installation, please let us know where you're experiencing the issue. And if there's an error message, please include that as well. If you think orders is missing, please provide the number and date. This way, we can perform a more targeted search and tell you what's wrong.

We have an extensive FAQ-section on the website. Pay particular attention to these sections: https://faq.webwinkelfacturen.nl/category/31/shopify.html and https://faq.webwinkelfacturen.nl/category/46/billit.html.

Would you prefer us to handle the installation of the integration for you? That is possible. Send an email to webcare@webwinkelfacturen.nl with your request. We charge €39.50 excluding VAT for an installation. For installations, we require access to the webshop and the accounting system.

We can perform migrations for orders that took place in the past. The request procedure and method are described in this faq. For migrations we charge €67.50 excl. VAT per 1000 orders.