Overview
The Gravity Forms FreshBooks Add-On connects your WordPress forms to the current FreshBooks product, helping you turn submitted form data into organized client, billing, expense, and project records.
Create or update clients, generate invoices and estimates, record expenses and other income, issue credit notes, set up recurring invoices, create projects, log time entries, or add billable items whenever a Gravity Form is submitted. Map form fields to FreshBooks data, use merge tags to customize record details, and apply conditional logic to control exactly which submissions are processed.
With OAuth 2.0 authentication, support for Gravity Forms pricing fields, delayed payment processing, and the option to record completed payments against FreshBooks invoices, the add-on connects form-driven sales and service workflows directly to your accounting processes.
The result is a flexible connection between Gravity Forms and FreshBooks that reduces duplicate data entry, speeds up invoicing, and keeps client and financial records organized.
Key Benefits
- Create or update FreshBooks clients from Gravity Forms submissions
- Match and update existing clients using their email address
- Create FreshBooks invoices and estimates automatically
- Send newly created invoices and estimates to clients by email
- Create expenses and assign them to FreshBooks staff and expense categories
- Record other income with an amount, date, category, source, and notes
- Create credit notes from submitted form data
- Set up recurring invoice profiles with configurable billing frequencies
- Create FreshBooks projects from form submissions
- Log time entries and optionally associate them with a FreshBooks project
- Create reusable billable items with names, descriptions, and unit costs
- Optionally assign expenses, projects, and time entries to a client
- Connect WordPress securely to the current FreshBooks REST API using OAuth 2.0
- Select the FreshBooks business account that should receive form data
- Map client names, email addresses, organizations, phone numbers, billing addresses, shipping addresses, VAT details, currencies, and languages
- Build invoice, estimate, credit note, and recurring invoice line items from Gravity Forms pricing fields
- Use fixed costs and quantities or select existing FreshBooks catalog items
- Map document dates and purchase order numbers from form fields
- Add discounts, notes, and payment terms using submitted values and merge tags
- Record a FreshBooks payment after a Gravity Forms payment is completed
- Delay feed processing until payment has been received
- Use conditional logic to process only qualifying submissions
- Create multiple feeds for different FreshBooks actions or submission conditions
- Process feeds asynchronously to avoid delaying form submission completion
- Automatically refresh expiring FreshBooks access tokens
- Save FreshBooks record IDs with the Gravity Forms entry
- Add entry notes confirming which FreshBooks records were created or updated
- Customize outgoing client, invoice, estimate, expense, income, credit note, recurring invoice, project, time entry, and item data with developer filters
- Run alongside the deprecated FreshBooks Classic Add-On without plugin, class, or hook conflicts
How It Works
Create a FreshBooks developer application, copy the OAuth redirect URI provided by the add-on, and connect your FreshBooks account from Forms → Settings → FreshBooks. If your FreshBooks user belongs to multiple businesses, select the account that should receive your form data.
Next, open a Gravity Form and create a FreshBooks feed. Choose the type of record you want to create, map the required form fields, and configure the settings for that action.
When a qualifying form entry is submitted, the add-on:
- Checks the feed’s conditional logic and payment-processing settings.
- Refreshes the FreshBooks OAuth access token when necessary.
- Creates or matches a FreshBooks client when the selected action requires one.
- Sends the mapped form data directly to the selected FreshBooks business.
- Creates the client, invoice, estimate, expense, other income, credit note, recurring invoice, project, time entry, or item.
- Emails the invoice or estimate when that option is enabled.
- Records a payment against the invoice when the configured Gravity Forms payment is completed.
- Saves supported FreshBooks record IDs with the Gravity Forms entry.
- Adds an entry note so administrators can confirm what was created or updated.
For clients, map the submitter’s email address, name, organization, billing and shipping addresses, phone numbers, VAT details, currency, language, and notes. You can create a new client for each qualifying submission or update an existing client when the submitted email address matches.
For invoices and estimates, build line items from Gravity Forms Product fields, configure a fixed line item, or select an existing FreshBooks item. You can also map the document date and purchase order number, apply a discount, add notes and terms, and send the completed document to the client by email.
For recurring invoices, select a billing frequency, define how many invoices should be generated—or allow billing to continue without an end date—and choose whether FreshBooks should email each generated invoice.
For expenses, map the amount, date, vendor, and notes, then select the appropriate FreshBooks staff member and expense category. Expenses can also be associated with a client when required.
For projects and time entries, use submitted values and merge tags to create project names, record durations, add notes, select an existing project, and optionally connect the record to a FreshBooks client.
Please log in to access this content. Log in
Requirements
- WordPress 6.5+
- PHP 7.4+
- Gravity Forms 2.9.24+
- FreshBooks Current API
- HTTPS for OAuth (FreshBooks requirement)
- Pretty permalinks recommended
Changelog
0.1.0-alpha.1
2026-09-16
- First alpha release of the Gravity Forms FreshBooks Add-On.
- Added OAuth 2.0 authentication for the current FreshBooks REST API.
- Added feeds that create clients, invoices, estimates, expenses, other income, credit notes, recurring invoices, projects, time entries, and items from Gravity Forms submissions.
- View more
Documentation
Freshbooks Add-On Documentation
This section is a short usage guide for connecting FreshBooks and creating clients, invoices, and related records from form submissions. Requirements, filters, and limits are covered above.
Connect FreshBooks
Each site uses its own FreshBooks developer app. FreshBooks data does not pass through Gravity Forms.
- Sign in to FreshBooks and open the developer page.
- Create an application and enable the scopes listed in Configuration above.
- In WordPress, open Forms → Settings → FreshBooks.
- Copy the OAuth Redirect URI shown on that page and paste it into the FreshBooks app. The URI has no query string.
- Paste the Client ID and Client Secret, save, then click Connect to FreshBooks.
- If the FreshBooks user belongs to more than one business, choose the account and save again.
A green FreshBooks has been connected notice means it worked. The Labs notice on this screen is expected. This add-on is not officially supported.
Copy the redirect URI from the same host you will click Connect on. It changes with the domain. On Local, a live link such as https://your-site.localsite.io/gf-freshbookslabs-oauth/ is the URI FreshBooks can reach over HTTPS. After you connect, you can keep working on localhost; token refresh uses the URI from connect time.
Disconnect removes the tokens stored in WordPress. It does not revoke the FreshBooks developer app.
Create a feed
Open the form, then Settings → FreshBooks → Add New. Give the feed a name you will recognize later.
Set Action to the FreshBooks record you want to create. One form can have several feeds. Use conditional logic when a field on the form should pick the action, for example Estimate versus Credit Note.
If the form collects payment, enable delayed processing so the feed runs after payment is received.
Map a client
Invoice, estimate, credit note, and recurring feeds need a client. Map Email, First Name, and Last Name. Email is required.
Optionally enable Update an existing client if email addresses match. A later submit with the same email updates that FreshBooks client instead of creating a second one. New invoices and estimates are still created.
Project, time entry, and expense feeds can optionally assign a client the same way.
Create an invoice or estimate
Set Action to Create Invoice or Create Estimate.
- Set Line Items to Use Pricing Fields if the form has products, Fixed Costs and Quantities for a single mapped line, or FreshBooks Items to pick a catalog item.
- Date can map to a Date field. Leave it empty to use today.
- Notes and Terms support merge tags.
- Optionally enable Send by email. New invoices and estimates are drafts unless this is on.
- For invoices, optionally enable Mark invoice as paid after a Gravity Forms payment is completed.
Create a recurring invoice
Set Action to Create Recurring Invoice. FreshBooks stores this as an invoice profile, not a one-off invoice.
- Frequency is how often FreshBooks should create the next invoice. Monthly is
m, not1m. - Number of Invoices is how many invoices the profile should create. Use
0for no end date. Insert a merge tag if the form collects a count. - Optionally enable Email invoices created from this profile.
Look for the profile under Recurring Invoices in FreshBooks, not the regular invoice list.
Create other income
Set Action to Create Other Income. This records income that does not need an invoice or a client.
- Amount is required.
- Date can map to a Date field. Leave it empty to use today.
- Category is the FreshBooks income type, such as Other or Online sales.
- Source and Notes support merge tags.
Other income is not listed with invoices or expenses. In FreshBooks open Payments → Other Income. Reports such as Profit and Loss also include it.
Create a project
Set Action to Create Project.
Project Name is required. Merge tags are supported, for example {Project Name:13}. Optionally assign the project to a client.
Create a time entry
Set Action to Create Time Entry.
- Duration is required and is in seconds.
3600is one hour. - Project is the FreshBooks project the time is logged on.
- Note supports merge tags.
The time entry is created at submit time. In FreshBooks open Time Tracking, or open the project and use its Time Tracking tab.
Create an item
Set Action to Create Item to add a catalog item in FreshBooks.
- Name is required. Merge tags are supported.
- Description and Unit Cost are optional.
Items appear in the FreshBooks items list. Invoice and estimate feeds can then use FreshBooks Items as the line item source.
Expense feeds need a Staff member and a Category. Both lists come from FreshBooks. Credit notes need the user:credit_notes:write scope on the FreshBooks app; reconnect after adding it.
After someone submits
- Open Forms → Entries for that form.
- Confirm a FreshBooks note on the entry, such as a client, invoice, or time entry ID.
- Open the matching screen in FreshBooks: Invoices, Estimates, Recurring Invoices, Expenses, Payments → Other Income, Projects, Time Tracking, or Items.
If the record is missing, confirm FreshBooks is still connected, that the feed condition matched, and that the entry note does not show an API error. Existing FreshBooks records are not deleted when you uninstall the plugin.









