The Expenses module enables you to manage and track your organization's business related expenses, whether they are goods, or services. Expense records also support billing them to your clients, so you can pass along the costs directly through your invoices. Effective use of the expense module can help you track and monitor your organization's cash flow, and keep up with your taxes.
Expenses Module View
When you select the Expenses module from the navigation menu on the left hand side of the screen, you will be taken to the table view listing and sorting all available expense records.
From the table view you can sort expense records by the various status filters on top of the table. You can use the Filter text box to search for an expense number, vendor, or amount. A More Actions menu to the right of each entry in the table shows a list of available management actions you can take against an expense record, such as editing, cloning to a new expense record, cloning to a new recurring expense record, archiving, or deleting.
Viewing/Editing an Expense
Simply click on an expense number from the table to view/edit that expense.
The view/edit panel for an expense record has all the details about the record broken into four sections, as follows:
Expense Number: the expense number is best left alone, so it can be automatically generated by Invoice Ninja. The policies governing generated numbers can be found in Settings > Generated Numbers.
Vendor: Link the expense to a vendor by selecting an available vendor record from the list here. (Vendor = who the expense is paid TO).
Client: Link the expense to a client by selecting an available client record. When creating an invoice from an expense, the new invoice will also be automatically be assigned to this client.
Project: select a project the expense is linked to
Category: put the expense in an expense category - expense categories can also be managed from Settings > Expense Settings
User: link an admin portal user to the expense. The User option can be used in the reports for tracking, but can also be used to give a specific user permission to view/edit an individual record.
Tax: Expense Tax Rates must first be enabled under Settings > Tax Settings for this tax option to show up. Here you can select a tax rate to apply to the expense if Taxes > By Rate is selected in the expense, or enter the tax name and tax amount if Taxes > By Amount is selected in the expense.
NOTE that you select the tax rate/amount here on the left, but control how the tax is applied on the right under the Taxes panel
based tax, to a custom flat tax.
Amount: enter the total expense amount
Currency: Currency you paid your expense in, automatically populated with the default currency of the vendor assigned to the expense. If not specified, currency is treated as your default company currency.
Date: Date of the expense (defaults to today). Note that this is the date that the vendor invoices you for the expense, not the date of your payment to the vendor.
Notes
Public Notes - Use this field to describe the expense. When creating an invoice for a client from an expense record, the public notes are included in the line item description for the expense.
Private Notes - The value of this field is only viewable by users of the admin portal, so you can use it to make notes to yourself and other coworkers about the expense record.
Additional Info
Should be invoiced: you can turn this toggle on if the expense should be invoiced to a client (see More Actions dropdown menu for next steps)
Mark Paid: Enable this to indicate that your organization has paid the vendor for this expense. This is not to indicate a payment from a client. After checking Mark Paid, these options will appear below:
Payment Type: Select the payment type your organization used to pay the vendor with.
Date: Enter the date your organization paid the vendor (defaults to today).
Transaction Reference: Enter a transaction reference code or number if applicable.
Convert currency: If the expense is billed in a currency other than your own default currency, enabling this allows you to set the currency you prefer to pay with, and an exchange rate, to calculate how much the expense cost in your preferred currency.
Exchange Rate: the current exchange rate will be automatically set when selecting a currency, but can be manually adjusted
Converted Amount: this amount is calculated as follows: Expense Amount * Exchange Rate = Converted Amount
Add Documents to Invoice: Enable this feature to include any documents attached to an expense, with the documents attached to the invoice when you create an invoice out of the expense record.
Taxes: configure how the expense is taxed to you in more detail.
Note that when you view your reports, expenses will be categorized by the currency of the expense/vendor, not the currency selected under "Convert Currency". If you wish to consolidate your profit and loss totals under one currency, you should select your own currency for each expense record, and use the converted amount for the expense amount, leaving any reference to a foreign currency out of the record details.
Taxes
The taxes section is where you control how taxes are applied to the expense.
Expense Tax Rates must first be enabled under Settings > Tax Settings for expense taxes to work (or it will say "Item tax rates are disabled").
The Taxes panel on the bottom right of the expense edit screen will let you choose one of these options:
Enter Taxes: Configure how the expense is taxed to you in more detail. Change between rate or amount to change the Tax field (under the details tab) from a percent based tax, to a custom flat tax.
By Rate: this is selected by default. You can select a tax rate under Details to apply to the expense.
By Amount: allows you to manually enter a Tax Name and Tax Amount under Details to apply to the expense. Note that you can apply up to three tax rates/amounts to an expense, based on the settting Settings > Tax Settings > Expense Tax Rates where you can select Disabled, One Tax Rate, Two Tax Rates, or Three Tax Rates. For example, if you have Three Tax Rates as the enabled option, you will see three Tax options on the left.
Inclusive Taxes: Enable this option if the taxes are inclusive to the cost of the expense, rather than exclusive. For example:
Exclusive tax is applied on top of the expense cost, like so: 100 + 10% = $110 total (100 + 10).
Inclusive tax is when taxes are deducted from the amount the vendor bills you, and included in your expense amount, rather than tacked on top of what you pay the vendor, like so: 100 + 10% = $100 total (90.91 +9.09).
Here's a video of enabling the Expense Tax Rates, adding a new Expense Category, and recording a new expense using these options:
More Actions dropdown menu
You can use the More Actions dropdown menu (if on the expenses table view) or the Save dropdown arrow menu in the top right corner of the expense edit panel, to see a list of management actions that can be taken against the expense record:
Clone: this will create a new expense record with the same details as the existing expense record, for today's date.
Clone to Recurring: clone the expense record to a new recurring expense
Archive
Delete
Restore: only visible if an archived/deleted expense is selected - lets you restore the expense to logged/paid status
These additional options will be visible only if Should be invoiced is checked:
Invoice Expense: this will create a new invoice record with the expense details automatically entered as a line item on the invoice
Add to Invoice: this will let you add the expense to an existing invoice with the expense details automatically entered as a line item on the invoice. A list of the client's invoices will show for selection.
Documents
The Documents tab supports uploading files such as documents, pictures, and more to allow you to share them with the client when attached to an invoice (if enabled) or with other users of the admin portal.
Lifecycle of an Expense
The following describe the lifecycle of an expense record
Logged
An expense's default state is Logged, when an expense is created. An expense is marked logged whether or not you have reported that you have paid the vendor for the expense yet.
Pending
An expense that has Should be Invoiced enabled, making it billable to a client, is automatically changed to a Pending state.
Invoiced
An expense record is automatically changed to Invoiced after the expense has been added to a client invoice. Note that an expense is marked Invoiced simply by being on an invoice, and its state doesn't change whether or not that invoice has been paid for by the client. The overview tab of the expense record's preview panel will link you to the invoice that expense is attached to.
Archived
An expense record can manually be archived, which simply hides it from view in the table or list of active expenses. The details of archived expenses are still included in reports. You can view archived expenses by changing filters in the table view, and you can use the "Restore" function to return an archived expense to its former state.
Deleted
An expense record can manually be deleted, which will remove it from view, and remove it from any reports as well. Deleted expense records can be seen by changing your filters when viewing the table or list of expenses, and using the "Restore" function can return the deleted expense record to its former state.
Tips
You could just create an expense only with an amount and nothing else... but it's best to always organize your expenses by vendor/client. For example, under Reports you're able to report on expenses by status, clients, vendors, projects, and categories. Also, expenses will be shown in categories under the Profit and Loss report.
You can see all expenses attached to a specific vendor: Vendor Details > Expenses
You can see all expenses attached to a specific client: Client Details > Expenses
Expenses can have default options configured under Settings > Expense Settings. See Expense Settings
Expense Inbound Email (Self Host Only)
This feature allows you to configure an e-mail address to accept attachments from vendors, clients and internal users which can then be processed using Mindee to perform data extraction and create expense records. Zugferd xml files are also supported and are able to be automatically parsed and converted into an expense.
The system works by configuring an e-mail address to accept attachments, the attachments (and the email body text) are stored on file and an expense record is created. The system will attempt to extract data from the document and insert it into the expense record.
The following settings are available:
Enable Expense Mailbox (Enabled/Disables the processing of emails)
Expense Mailbox E-Mail (The e-mail address to process which will be receiving the emails)
Allow Company Users (Toggles whether internal users can send emails to the configured expense mailbox)
Allow Vendors (Toggles whether vendors can send emails to the configured expense mailbox)
Allow Unknown Senders (Toggles whether unknown semders can send emails to the configured expense mailbox)
Allowed Email Addresses (A comma separated list of domains which are allowed to send emails to the configured expense mailbox)
Blocked Email Addresses (A comma separated list of domains which are blocked from sending emails to the configured expense mailbox)
Inbound Providers
Mailgun
To ensure delivery, you have to configure all used mailgun regions with a recieving configuration using store & notify.
Create and setup your mailgun account
Prepare your DNS settings for inbound mail processing, by setting up necessary MX records
Create a receiving route using store and notify
3a. Go to Receiving Section and click on "Create Route"
3b. Create your route by selecting your mailbox configured in invoiceninja and add notify endpoint /api/v1/mailgun_inbound_webhook
Brevo
To ensure delivery you have to configure brevo inbound parsing according to: https://developers.brevo.com/docs/inbound-parse-webhooks
Create and setup your brevo account
Prepare your DNS settings for inbound mail processing, by setting up necessary MX records
Register the webhook via the brevo api to the following notify endpoint: /api/v1/brevo_inbound_webhook?token=brevo-api-token
SetUp Postmark
To ensure delivery you have to configure brevo inbound parsing according to: https://developers.brevo.com/docs/inbound-parse-webhooks
SetUp with Own MailServer
If you want to use your own mailbox, you have to either redirect the mail to a mailbox of one of the providers above or use a provider for inbound directly.
We recommend to use one of these providers hosted on a subdomain f.ex. invoicing.xxx.com directly or to use the auto-generated mailbox of postmark when you are using redirect.
SetUp Mindee OCR
To parse a document IN can use OCR solutions like Mindee. Mindee offers to process documents and guess the contents using AI. Each account has 250 pages for free, which makes it very suiteable for small busineses using self-hosted.
Use the following .env variable to configure your mindee api key: