Documentation
How do I enable the plugin?
After purchasing Hello Bonsai Integration for Gravity Forms, you’ll need to install the plugin on your WordPress website. Let’s walk through that process.
Step 1: Installation
Log in to your WordPress website and navigate to Plugins → Add Plugin → Upload Plugin → Install the zip file and activate it.
Step 2: Register the Plugin
Navigate to Forms → Settings → Hello Bonsai and click Activate License in the License section. Enter your license key and activate it.
Step 3: Connect Your Hello Bonsai Account
In your Hello Bonsai account, go to Settings → My Account → Integrations → Bonsai API (new) and create an API key (it starts with bonsai_at_). Back in WordPress, paste it into the Hello Bonsai Connection section and click Save Settings – the key is verified against Hello Bonsai and the account added in one step.
Step 4: Create a Feed
Open the form you want to capture leads from, go to its Settings → Hello Bonsai tab, and add a feed. Map your Name and Email fields, then toggle on the Company and Deal sections if you want them. That’s it – the next submission lands in Hello Bonsai.
Feature Details
What gets created in Hello Bonsai
Each feed runs a chain of up to four steps on every submission:
- Company (optional) – matched by domain and/or name, or created when nothing matches.
- Contact (always) – found by exact email and updated, or created and linked to the company.
- Deal (optional) – opened in your chosen pipeline stage, assigned, valued, and attached to the contact and company.
- Comment (optional) – the submission posted on the new deal as a paper trail.
If a later step can’t complete, the earlier steps still count – the entry is marked partially synced with a plain-English explanation of exactly which step needs attention, and Re-send picks up where it left off.
Contact fields it maps
- Name (required) – Gravity Forms Name fields are joined automatically (First + Last).
- Email (required) – the unique key Hello Bonsai matches contacts by.
- Job Title
- Phone Number
These are the fields Hello Bonsai’s API accepts on a contact today. As Hello Bonsai expands its API (custom fields are on their radar), this plugin will grow with it.
If the contact already exists, you choose the behavior per feed: update the existing contact with the submitted values (default), or leave it untouched. Either way the submission is linked to the existing contact – no duplicate is ever created, and a blank optional field never overwrites real data in Hello Bonsai.
Company Matching
Hello Bonsai treats website domains as unique across your account – a domain can belong to only one company – which makes domain matching extremely reliable. The Company section of each feed gives you three matching modes:
- Domain, then company name (default) – try the domain first, fall back to an exact (case-insensitive) name match.
- Domain only
- Company name only
Map a Website/Domain field and the plugin normalizes whatever visitors type – https://www.acme.com/contact becomes acme.com before matching. If no domain field is mapped, the domain of the contact’s email address is used automatically, and free email providers (gmail.com, outlook.com, yahoo.com, icloud.com, and dozens more) are ignored so you never end up with a “Gmail” company. Developers can adjust the free-provider list with a filter.
When nothing matches, you choose per feed: create the company (default) or skip it. Created companies are named from the mapped Company Name field, or from their domain when no name was submitted – the same convention Hello Bonsai itself uses.
Matching an existing company never edits it. And when an existing contact submits with a company they aren’t linked to yet, the plugin creates the link without changing the company’s primary contact – something Hello Bonsai’s API makes surprisingly tricky, handled for you.
Deals
Toggle on the Deal section and every captured lead can open a deal on your Hello Bonsai deal board. Hello Bonsai requires every deal to belong to a company, so the Company section needs to be enabled and resolve – the feed editor and the entry results both make this clear if it isn’t.
- Deal Title – supports Gravity Forms merge tags, e.g.
Website lead – {Name:1}. Defaults to the form title. - Deal Value – map any form field holding a dollar amount. Product fields are read currency-aware (the price, not the label), and Number fields work great too.
- Pipeline Stage – a live picker of your actual deal-board stages, pulled from your Hello Bonsai account. Defaults to your first stage.
- Assign To – unassigned, the connected account’s member, or any active team member (also pulled live).
- Create a deal – on every submission, or only when the contact is new. The second option keeps returning clients from stacking up duplicate deals.
Deal comments
Enable the comment option and the plugin posts the submission on the newly created deal – the default template is {form_title} followed by {all_fields}, and you can customize it with any merge tags. Whoever picks up the deal in Hello Bonsai sees the full inquiry without leaving the deal board. (Hello Bonsai comments are plain text; formatting is stripped by Hello Bonsai.)
Entry Results & Re-send
Every entry gets a Hello Bonsai box on its detail page showing exactly what happened:
- Synced – every requested step completed.
- Partially synced – the contact is safe in Hello Bonsai, but a later step (company, deal, or comment) needs attention. The message says exactly which and why.
- Sync failed – nothing could be written; the message includes Hello Bonsai’s own error.
The created Contact, Company, and Deal IDs are clickable links straight into your Hello Bonsai account, and Hello Bonsai’s request ID is shown for any support conversation.
The Re-send to Hello Bonsai button retries a failed or partial sync safely: companies and contacts re-match instead of duplicating, an already-created deal is never recreated, and an already-posted comment is never posted twice. It also works on entries that predate the plugin – open any older entry and click Send to Hello Bonsai to backfill it.
Merge Tags
{bonsai_contact_id} – the Hello Bonsai contact ID linked to this entry.
{bonsai_company_id} – the Hello Bonsai company ID linked to this entry.
{bonsai_deal_id} – the Hello Bonsai deal ID opened for this entry.
Use them in notifications, confirmations, and webhook payloads. Feeds process synchronously during the submission, so the IDs are already resolved when Gravity Forms sends the same submission’s notifications – no race conditions. Tags for records that weren’t created (for example, no deal on a repeat submitter) simply come through empty.
Multiple Accounts
Agencies and multi-brand teams can connect more than one Hello Bonsai account. Each account is verified when added, listed in a Connected Accounts table with test and remove actions, and each feed chooses which account it sends to – with a default account used when a feed doesn’t specify. Credentials are stored server-side in your WordPress database and never rendered back into the page after saving.
Error Notifications & Re-sync
Error notifications – add an email address under Forms → Settings → Hello Bonsai → Error Reporting and you’ll get an email whenever a sync fails or only partially succeeds. The email includes the feed, the exact result message, Hello Bonsai’s request ID, and a direct link to the entry so you can investigate and re-send in two clicks.
Entry-edit re-sync – optionally re-run a form’s feeds when an entry is edited in the WordPress admin, so the linked Hello Bonsai contact and company pick up the corrected values. Deals are never created twice for the same entry, no matter how many times it re-syncs.
FAQs
Where do I get a Hello Bonsai API key?
In your Hello Bonsai account under Settings → API, create an API key – it starts with bonsai_at_. Paste it on the plugin’s settings page and it’s verified and stored in one step. Any Hello Bonsai account that can create an API key there works with this plugin.
Why wasn’t a deal created for my submission?
Hello Bonsai requires every deal to belong to a company, so the feed’s Company section must be enabled and must match or create one. The entry’s Hello Bonsai box tells you exactly what happened on each step – if the company was skipped or couldn’t resolve, the deal message says so in plain English.
What happens when the same person submits twice?
The plugin finds their existing contact by email – no duplicate is ever created. Per feed, you choose whether the submission updates the contact’s details or leaves them untouched, and whether it opens another deal or only deals on first contact. Companies re-match the same way.
Can I push entries that were submitted before I installed the plugin?
Yes. Open any entry and click Send to Hello Bonsai in the Hello Bonsai box. It runs the form’s feeds against that entry with full duplicate protection, so backfilling is safe even if some of those people are already in your Hello Bonsai.
Can I map custom fields, or send file uploads?
Not yet – Hello Bonsai’s public API doesn’t currently support custom fields, file attachments, or webhooks. The plugin maps everything the API accepts today, and as Hello Bonsai expands the API, so will this plugin. In the meantime, the deal-comment option is a great way to get the full submission (every field) in front of whoever works the lead.
Can I only send certain submissions to Hello Bonsai?
Yes – every feed supports Gravity Forms conditional logic (“Send to Hello Bonsai if…”), so you can gate syncing on any field: only qualified budgets, only certain service selections, only non-spam, whatever fits your form.
What data leaves my site?
Only the values you map in the feed (plus the comment template, if enabled), sent directly to Hello Bonsai’s official API over HTTPS. Nothing is sent to any other third party, and nothing is sent at all unless a feed’s conditions are met.
Does it work with caching/CDNs and script optimization?
Yes, with nothing to configure. All syncing happens server-side when the form is submitted – there are no front-end scripts, so there’s nothing to exclude from caching, minification, or deferral plugins.
Does it work with AJAX-enabled Gravity Forms?
Yes. It works with AJAX forms and standard (non-AJAX) Gravity Forms submissions.
What happens if Hello Bonsai is slow or unreachable during a submission?
Your visitor is protected: the plugin retries transient failures briefly, but caps the total time it will spend during one submission (40 seconds by default, adjustable via a filter) so a slow API can never hang your form. Whatever couldn’t complete is honestly recorded on the entry as failed or partial – and if you’ve set an error notification email you’ll hear about it – then one click on Re-send finishes the job once Hello Bonsai is healthy again.
Does it work with a WordPress Multisite network?
Yes. Each subsite connects its own Hello Bonsai account (or accounts) and configures its own feeds, and uninstalling cleans up across the whole network. With an Unlimited license, Network Mode lets you push a single license key to every subsite in one batch.
Is it translation-ready?
Yes – every string is translatable. You can use the free Loco Translate plugin to create a translation for your site’s language/locale. If you’ve never used Loco Translate before, here’s a beginner-friendly tutorial.
Hooks
Filters
pb_gfhellobonsai_contact_payload
Filter the contact body before it is sent to Hello Bonsai – adjust the name, email, job title, or phone number on the way out.
Parameters:
$contact_body(array) – The shaped contact fields (name, email, job_title, phone_number).$feed(array) – The Gravity Forms feed.$entry(array) – The current entry.$form(array) – The current form.
// Title-case every contact name on its way into Hello Bonsai.
add_filter( 'pb_gfhellobonsai_contact_payload', function( $contact_body, $feed, $entry, $form ) {
if ( isset( $contact_body['name'] ) ) {
$contact_body['name'] = ucwords( strtolower( $contact_body['name'] ) );
}
return $contact_body;
}, 10, 4 );
pb_gfhellobonsai_company_payload
Filter the company body before a company is created – adjust the name or domains.
Parameters:
$body(array) – The company fields (name, domains).$feed(array) – The Gravity Forms feed.$entry(array) – The current entry.$form(array) – The current form.
// Prefix companies created from forms so they're easy to spot in Hello Bonsai.
add_filter( 'pb_gfhellobonsai_company_payload', function( $body, $feed, $entry, $form ) {
$body['name'] = 'Lead: ' . $body['name'];
return $body;
}, 10, 4 );
pb_gfhellobonsai_deal_payload
Filter the deal body before it is sent – adjust the title, value, stage, or assignee programmatically.
Parameters:
$deal(array) – The deal fields (title, company_id, contact_id, board_group_id, assignee_member_id, deal_value).$feed(array) – The Gravity Forms feed.$entry(array) – The current entry.$form(array) – The current form.
// Route big-budget leads into a different pipeline stage.
add_filter( 'pb_gfhellobonsai_deal_payload', function( $deal, $feed, $entry, $form ) {
if ( isset( $deal['deal_value'] ) && (float) $deal['deal_value'] >= 10000 ) {
$deal['board_group_id'] = 'your-priority-stage-uuid';
}
return $deal;
}, 10, 4 );
pb_gfhellobonsai_free_email_domains
Filter the list of free-mail domains excluded from email-based company matching (gmail.com, outlook.com, yahoo.com, icloud.com, and dozens more by default).
Parameters:
$free_domains(array) – Lowercased domains to exclude.
// Also treat a local ISP's addresses as personal email.
add_filter( 'pb_gfhellobonsai_free_email_domains', function( $free_domains ) {
$free_domains[] = 'myisp.example';
return $free_domains;
} );
pb_gfhellobonsai_record_url
Filter the Hello Bonsai app URL used for a synced record’s link in the entry box. Return an empty string to render a plain ID with no link.
Parameters:
$url(string) – The default app URL for the record.$type(string) – One of contact, company, deal.$id(int) – The Hello Bonsai record ID.
pb_gfhellobonsai_run_time_budget
Adjust the wall-clock budget (in seconds) shared by every Hello Bonsai request in one feed run. Feeds process synchronously during the submission, so this is the hard ceiling on how long a degraded API can hold your visitor. Default is 40.
Parameters:
$seconds(float) – The budget in seconds. Default 40.
// Tighten the budget on high-traffic sites.
add_filter( 'pb_gfhellobonsai_run_time_budget', function( $seconds ) {
return 20.0;
} );
pb_gfhellobonsai_runtime_allowed
Override the feed-processing license gate. Primarily useful on staging and development environments.
Parameters:
$allowed(bool) – Whether feed processing is currently allowed by the license.
pb_gfhellobonsai_api_base_url
Override the Hello Bonsai API base URL. Only useful for development and testing against a mock API – you’ll never need this in production.
Parameters:
$url(string) – The API base URL. Defaulthttps://app.hellobonsai.com/public-api/v1.