{"id":354090,"date":"2026-08-16T04:50:48","date_gmt":"2026-08-16T04:50:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/forms2zoho\/"},"modified":"2026-10-15T11:07:52","modified_gmt":"2026-10-15T11:07:52","slug":"techwave-form-sync-for-zoho","status":"publish","type":"plugin","link":"https:\/\/kea.wordpress.org\/plugins\/techwave-form-sync-for-zoho\/","author":14591134,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"FormBridge for Zoho","header_author":"Techwave Solutions","header_description":"Send WordPress form submissions to Zoho CRM, Bigin, Books, Desk, Campaigns and Marketing Automation.","assets_banners_color":"1a2851","last_updated":"2026-10-15 11:07:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/techwavesolutions.net\/formbridge-for-zoho\/","header_author_uri":"https:\/\/techwavesolutions.net\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":224,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"Kaderoishi","date":"2026-08-16 04:50:40","revision":3649281},"1.1.0":{"tag":"1.1.0","author":"Kaderoishi","date":"2026-10-15 11:07:52","revision":3748257}},"upgrade_notice":{"1.1.0":"<p>Renamed to FormBridge for Zoho, with rebuilt admin screens, a four-step feed editor, a Dashboard, and file uploads sent to Zoho. Feeds, connections and settings carry over; no reconnection needed. Note: log entries are now kept until you delete them, with automatic deletion opt-in.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3748239,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3748239,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3748239,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3748239,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3748239,"resolution":"1","location":"assets","locale":"","width":1368,"height":676},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3748239,"resolution":"2","location":"assets","locale":"","width":1368,"height":947},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3748239,"resolution":"3","location":"assets","locale":"","width":1368,"height":1108},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3748239,"resolution":"4","location":"assets","locale":"","width":1368,"height":600},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3748239,"resolution":"5","location":"assets","locale":"","width":1368,"height":1040},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3748239,"resolution":"6","location":"assets","locale":"","width":1368,"height":938},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3748239,"resolution":"7","location":"assets","locale":"","width":1368,"height":1135}},"screenshots":{"1":"The feeds list under FormBridge \u2192 All Feeds. Every feed shows which form it listens to, where it sends, and an on\/off switch, with search, filtering by Zoho app, and per-row Info, Timeline, Clone and Delete actions.","2":"Choosing the trigger. Pick the form plugin from the tiles, then pick the form itself on the next step from a dropdown read out of your saved forms, with no form ID to look up, and no editing inside the form plugin.","3":"Field mapping. Each Zoho field is matched to a form field or a fixed static value. Both lists load automatically: the Zoho fields from the module you chose, the form fields from the form you chose.","4":"The Connections tab. Connect more than one Zoho account, each with its own data centre, and see at a glance which Zoho apps each one is authorized for.","5":"Creating a connection. Paste the Client ID and Secret from your Zoho API console, tick only the apps you need, and approve on Zoho's own consent screen. Secrets are encrypted before they are stored.","6":"The Logs tab. Every delivery is recorded (success, failure, or suppressed) with the exact data sent, a link straight to the record in Zoho, and one-click resubmit. New entries appear live.","7":"The Settings tab. Logging, submitted-value storage, automatic log cleanup, failure email alerts, and full data erasure on uninstall, grouped by what they affect."}},"plugin_section":[],"plugin_tags":[1150,601,597,335,14392],"plugin_category":[42,58],"plugin_contributors":[275931],"plugin_business_model":[],"class_list":["post-354090","plugin","type-plugin","status-publish","hentry","plugin_tags-crm","plugin_tags-forms","plugin_tags-integration","plugin_tags-leads","plugin_tags-zoho","plugin_category-contact-forms","plugin_category-user-management","plugin_contributors-kaderoishi","plugin_committers-kaderoishi"],"banners":{"banner":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/banner-772x250.png?rev=3748239","banner_2x":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/banner-1544x500.png?rev=3748239","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/icon-128x128.png?rev=3748239","icon_2x":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/icon-256x256.png?rev=3748239","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/screenshot-1.png?rev=3748239","caption":"The feeds list under FormBridge \u2192 All Feeds. Every feed shows which form it listens to, where it sends, and an on\/off switch, with search, filtering by Zoho app, and per-row Info, Timeline, Clone and Delete actions."},{"src":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/screenshot-2.png?rev=3748239","caption":"Choosing the trigger. Pick the form plugin from the tiles, then pick the form itself on the next step from a dropdown read out of your saved forms, with no form ID to look up, and no editing inside the form plugin."},{"src":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/screenshot-3.png?rev=3748239","caption":"Field mapping. Each Zoho field is matched to a form field or a fixed static value. Both lists load automatically: the Zoho fields from the module you chose, the form fields from the form you chose."},{"src":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/screenshot-4.png?rev=3748239","caption":"The Connections tab. Connect more than one Zoho account, each with its own data centre, and see at a glance which Zoho apps each one is authorized for."},{"src":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/screenshot-5.png?rev=3748239","caption":"Creating a connection. Paste the Client ID and Secret from your Zoho API console, tick only the apps you need, and approve on Zoho's own consent screen. Secrets are encrypted before they are stored."},{"src":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/screenshot-6.png?rev=3748239","caption":"The Logs tab. Every delivery is recorded (success, failure, or suppressed) with the exact data sent, a link straight to the record in Zoho, and one-click resubmit. New entries appear live."},{"src":"https:\/\/ps.w.org\/techwave-form-sync-for-zoho\/assets\/screenshot-7.png?rev=3748239","caption":"The Settings tab. Logging, submitted-value storage, automatic log cleanup, failure email alerts, and full data erasure on uninstall, grouped by what they affect."}],"raw_content":"<!--section=description-->\n<p>FormBridge for Zoho links the forms you already have to the Zoho apps you already use. When a visitor submits a form, the values you mapped are sent to the Zoho service configured for that form and a record is created in your Zoho account.<\/p>\n\n<p>Each form is configured on its own, in one place. One form can create a lead in Zoho CRM, another a contact in Bigin, another a customer in Zoho Books, another a ticket in Zoho Desk, and another can subscribe someone to a Zoho Campaigns or Marketing Automation mailing list, with different forms pointing at different Zoho accounts, organizations and data centers if that is what you need.<\/p>\n\n<p><strong>What it covers<\/strong><\/p>\n\n<ul>\n<li><strong>Ten form plugins, one mapping screen.<\/strong> Elementor Pro Forms, Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms, Formidable Forms, Forminator, Happy Forms and SureForms, all configured in the WordPress admin, not inside each form plugin's own editor, so a site running two form plugins still has one place to look.<\/li>\n<li><strong>Six Zoho apps, not just CRM.<\/strong> Zoho CRM, Zoho Bigin, Zoho Books, Zoho Desk, Zoho Campaigns and Zoho Marketing Automation.<\/li>\n<li><strong>Per-form feeds.<\/strong> A \"feed\" is one form \u2192 one Zoho destination. A form can be pointed anywhere, cloned, disabled, or switched to another account without touching the form itself.<\/li>\n<li><strong>More than one Zoho account.<\/strong> Connect several accounts, each with its own data center and its own set of authorized apps, and pick per feed which one to use.<\/li>\n<li><strong>Every Zoho data center.<\/strong> US (.com), EU (.eu), India (.in), Australia (.com.au), Japan (.jp), Canada (.ca), Saudi Arabia (.sa) and China (.com.cn). Endpoints switch automatically for the data center each account was created in.<\/li>\n<li><strong>Field mapping with static values.<\/strong> Map each Zoho field to a form field or to a fixed value, with a duplicate check (upsert) for Zoho CRM and Zoho Bigin so the same person does not become two records.<\/li>\n<li><strong>File uploads go too.<\/strong> A file attached to a submission is sent to Zoho and lands in the file field you mapped it to, from every supported form plugin.<\/li>\n<li><strong>Retries that do not lose submissions.<\/strong> Delivery happens during the submission itself. A first attempt that fails for a transient reason is retried in the background instead of being dropped.<\/li>\n<li><strong>Delivery logs and one-click resubmit.<\/strong> Every delivery is recorded with its outcome, the exact fields sent, and a link straight to the record in Zoho. Tokens and secrets are redacted.<\/li>\n<li><strong>Privacy tooling built in.<\/strong> Log entries are covered by WordPress's own personal-data exporter and eraser, storing submitted values is off by default, and everything the plugin created can be erased when it is deleted.<\/li>\n<\/ul>\n\n<p><strong>The optional Pro add-on<\/strong><\/p>\n\n<p>Everything described above is part of this plugin and stays free. There is also a paid add-on, FormBridge for Zoho Pro, which widens where a record can come from and which Zoho app it can go to. Its triggers appear here as locked tiles on the trigger step, so you can see what they cover before deciding; nothing is locked on a site that already has the add-on, and nothing above needs it.<\/p>\n\n<ul>\n<li><strong>More triggers.<\/strong> WooCommerce and WooCommerce Bookings, MemberPress, LearnDash, Tutor LMS, GiveWP, Easy Digital Downloads, Dokan, WP Job Manager, The Events Calendar, both Divi form builders, the booking plugins Amelia, LatePoint, Bookly, Simply Schedule Appointments, FluentBooking, Booking Calendar and Easy Appointments, and an Action Hook trigger for your own code.<\/li>\n<li><strong>More Zoho apps.<\/strong> Zoho FSM, People, Creator, Recruit, Projects, Sheet, Sign, Analytics, Cliq, Inventory, SalesIQ, Flow and ServiceDesk Plus Cloud.<\/li>\n<li><strong>More per feed.<\/strong> Conditional logic so a feed only sends when the submission matches, a Webhook destination for a URL that is not Zoho at all, and further Zoho CRM actions.<\/li>\n<\/ul>\n\n<p>Details are at <a href=\"https:\/\/techwavesolutions.net\/formbridge-for-zoho\/\">techwavesolutions.net\/formbridge-for-zoho<\/a>. The add-on requires this plugin.<\/p>\n\n<p><strong>Disclaimer<\/strong><\/p>\n\n<p>FormBridge for Zoho is an independent third-party plugin developed by Techwave Solutions and is not affiliated with, endorsed by, or sponsored by Zoho Corporation Pvt. Ltd. \"Zoho\", \"Zoho CRM\", \"Bigin\", \"Zoho Books\", \"Zoho Desk\", \"Zoho Campaigns\" and \"Zoho Marketing Automation\" are trademarks of Zoho Corporation Pvt. Ltd. All other product names referenced here (including Elementor, Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms, Formidable Forms, Forminator, Happy Forms and SureForms) are trademarks of their respective owners and are used only to describe which form plugins this plugin can read submissions from. Using FormBridge for Zoho requires your own Zoho account, which is subject to Zoho's terms and pricing.<\/p>\n\n<p><strong>How mapping works<\/strong><\/p>\n\n<p>All mapping is done in the WordPress admin under <strong>FormBridge \u2192 All Feeds<\/strong>, not inside any form plugin's own editor. You create a feed: pick the form plugin, pick the form by name, then choose the Zoho app, account, organization (where the app needs one) and module, and map each Zoho field to a form field or a static value. To find the exact Zoho API names, open <strong>FormBridge \u2192 Connections<\/strong> and use the <strong>Modules &amp; fields<\/strong> button for that account.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to Zoho, a third-party service operated by Zoho Corporation Pvt. Ltd. That connection is required for the plugin to do its job: without it there is nowhere to send a submission. Nothing is sent to Zoho until you connect an account and enable a feed on a specific form.<\/p>\n\n<p><strong>1. Zoho OAuth (accounts server)<\/strong><\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> the Client ID and Client Secret you entered from your own Zoho API console, the redirect URI of your site, and the permission scopes for the Zoho apps you ticked when creating the connection. Afterwards, the refresh token belonging to your connection is sent to obtain a short-lived access token.<\/li>\n<li><strong>When:<\/strong> when you create or re-authorize a connection, and whenever a cached access token has expired and needs refreshing.<\/li>\n<li><strong>Why:<\/strong> to obtain and renew authorization to write records into your own Zoho account. No password is ever sent or stored, and the plugin never sees your Zoho login.<\/li>\n<li><strong>Where:<\/strong> the accounts host for that connection's data center, e.g. <code>accounts.zoho.com<\/code>, or the matching <code>.eu<\/code>, <code>.in<\/code>, <code>.com.au<\/code>, <code>.jp<\/code>, <code>.ca<\/code>, <code>.sa<\/code>, <code>.com.cn<\/code> host.<\/li>\n<\/ul>\n\n<p><strong>2. Zoho application APIs<\/strong><\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> the form field values you mapped for that feed (and only those; unmapped fields are not sent), plus the module or resource name, the selected account, and the organization\/department where the Zoho app requires one. This can include personal data, because form submissions usually do: names, email addresses, phone numbers and message text.<\/li>\n<li><strong>When:<\/strong> each time a visitor submits a form that has an enabled feed pointing at Zoho, and again on an automatic background retry if the first attempt failed for a temporary reason. Also when you press <strong>Resubmit<\/strong> on the Logs screen. Metadata reads (listing modules, fields, mailing lists, tags, departments) happen only while you are configuring a feed in wp-admin.<\/li>\n<li><strong>Why:<\/strong> to create the record (lead, contact, customer, ticket or list subscription) that the feed is configured to create.<\/li>\n<li><strong>Where:<\/strong> the API host for the connection's data center: <code>www.zohoapis.com<\/code> for CRM, Bigin and Books; <code>desk.zoho.com<\/code> for Desk; <code>campaigns.zoho.com<\/code> for Campaigns; <code>marketingautomation.zoho.com<\/code> for Marketing Automation, each with the regional variant matching the chosen data center.<\/li>\n<\/ul>\n\n<p>Zoho's own terms govern what happens to the data once it arrives:<\/p>\n\n<ul>\n<li>Zoho Privacy Policy: https:\/\/www.zoho.com\/privacy.html<\/li>\n<li>Zoho Terms of Service: https:\/\/www.zoho.com\/terms.html<\/li>\n<\/ul>\n\n<p><strong>3. Deactivation feedback (optional, opt-in)<\/strong><\/p>\n\n<p>When you deactivate FormBridge for Zoho from the Plugins screen, the plugin asks why. Answering is entirely optional and can be skipped, and the plugin deactivates either way.<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> the reason you pick from the list, the note you type if you type one, and the plugin's version number. Nothing else: no site address, no account or email address, no user details, no WordPress\/PHP\/server information, and no identifier of any kind. There is nothing in the request that says which site it came from.<\/li>\n<li><strong>When:<\/strong> only when you press <strong>Send Feedback &amp; Deactivate<\/strong>. Pressing <strong>Skip &amp; Deactivate<\/strong>, closing the dialog, or deactivating with JavaScript disabled sends no request at all. Nothing is sent at any other time.<\/li>\n<li><strong>Why:<\/strong> so the developer knows which problems make people stop using the plugin. It has no effect on how the plugin works.<\/li>\n<li><strong>Where:<\/strong> the developer's own feedback collector at <code>https:\/\/feedback.techwavesolutions.net\/index.php<\/code>, operated by Techwave Solutions. Service terms and privacy policy: https:\/\/techwavesolutions.net\/<\/li>\n<li><strong>Failures are ignored:<\/strong> if the request fails or the service is unreachable, deactivation still completes and you are never asked to retry.<\/li>\n<\/ul>\n\n<p>Site owners who would rather it never ran can switch it off with one line in <code>wp-config.php<\/code>, which stops the request being made at all:<\/p>\n\n<pre><code>define( 'FORM2ZOHO_FEEDBACK_ENDPOINT', '' );\n<\/code><\/pre>\n\n<p>The filter <code>form2zoho_feedback_endpoint<\/code> does the same from a plugin or mu-plugin.<\/p>\n\n<p><strong>Nothing else leaves your site.<\/strong> Apart from the three cases above, the plugin sends no analytics, telemetry, usage statistics, site address, admin email, WordPress\/PHP version or installation identifier anywhere. It loads no script, stylesheet, font or image from a remote host, and it downloads no code.<\/p>\n\n<p><strong>Data stored on your own site<\/strong><\/p>\n\n<ul>\n<li><strong>Delivery logs<\/strong> are written to a table in your own database (timestamp, outcome, Zoho app, module, record id, and the error text when something failed). Submitted values are included only if you switch <strong>Store submitted values in the log<\/strong> on; it is off by default. Log entries are kept until you delete them, unless you turn on <strong>Delete log entries automatically<\/strong> on the Settings tab (off by default), which removes entries older than the number of days you choose.<\/li>\n<li><strong>Retry data.<\/strong> If a delivery temporarily fails and a retry is scheduled, the submitted values required for the retry may be temporarily stored by WordPress (in a transient on your own site) until the retry is completed or the retry data expires (at most two hours). It is deleted as soon as the retry runs, whether that attempt succeeds or fails for good, and it is never sent anywhere other than Zoho.<\/li>\n<li><strong>Credentials.<\/strong> Client secrets and refresh tokens are encrypted (AES-256-GCM) before being saved; access tokens are short-lived and cached in transients.<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>Form submissions usually contain personal data, and this plugin's whole purpose is to transmit the mapped fields of a submission to Zoho, a third-party service, as described under <strong>External services<\/strong> above. Review Zoho's privacy policy and make sure your own privacy notice covers this transfer.<\/p>\n\n<p>On your own site, the plugin stores delivery log entries in a custom database table (including the submitted field values when <strong>Store submitted values in the log<\/strong> is enabled, which it is not by default) until they are deleted, by hand on the Logs screen or automatically after a set number of days when <strong>Delete log entries automatically<\/strong> is turned on (it is off by default). A submission waiting on an automatic retry is held in a WordPress transient until the retry runs or that copy expires, at most two hours.<\/p>\n\n<p>The plugin registers a personal-data exporter and eraser, so log entries mentioning a given email address are included in, and removed by, WordPress's own <strong>Tools \u2192 Export\/Erase Personal Data<\/strong> flows. Suggested privacy-policy text is added to <strong>Settings \u2192 Privacy<\/strong>.<\/p>\n\n<p>Access tokens, refresh tokens, client secrets and authorization headers are never written to the logs in readable form.<\/p>\n\n<p>The optional deactivation feedback described under <strong>External services<\/strong> carries no personal data and nothing that identifies your site (only the reason you pick, the note you choose to type, and the plugin version), and it is sent only if you press the send button.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip from <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>In your Zoho API console (https:\/\/api-console.zoho.com), create a <strong>Server-based Application<\/strong>. Set the <strong>Authorized Redirect URI<\/strong> to the value shown on the plugin's <strong>Connections<\/strong> tab.<\/li>\n<li>Copy the Client ID and Client Secret.<\/li>\n<li>In wp-admin go to <strong>FormBridge \u2192 Connections \u2192 Create Connection<\/strong>: pick your data center, paste the Client ID and Secret, and tick the Zoho app(s) this account will actually send to. Then connect and approve access on Zoho's own consent screen.<\/li>\n<li>For Elementor: edit your form and, under <strong>Form settings \u2192 Additional Options<\/strong>, set a unique <strong>Form Name<\/strong>, then save the page. For every other supported plugin the form's own title is used, so no extra setup is needed. Either way, no submit action needs to be added, because the plugin listens for submissions itself.<\/li>\n<li>Go to <strong>FormBridge \u2192 All Feeds \u2192 Add New Feed<\/strong>. Choose the form plugin, pick the form, choose the Zoho app, account, organization and module, map your fields, and save the feed. New submissions are sent from then on.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20form%20plugins%20are%20supported%3F\"><h3>Which form plugins are supported?<\/h3><\/dt>\n<dd><p>Elementor Pro Forms, Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms, Formidable Forms, Forminator, Happy Forms and SureForms. Pick one source per feed; you only need the form plugin you actually use.<\/p><\/dd>\n<dt id=\"which%20zoho%20apps%20are%20supported%3F\"><h3>Which Zoho apps are supported?<\/h3><\/dt>\n<dd><p>Zoho CRM, Zoho Bigin, Zoho Books, Zoho Desk, Zoho Campaigns and Zoho Marketing Automation. More Zoho apps come with the optional Pro add-on; see below.<\/p><\/dd>\n<dt id=\"is%20there%20a%20paid%20version%3F\"><h3>Is there a paid version?<\/h3><\/dt>\n<dd><p>Yes, an optional add-on called FormBridge for Zoho Pro. This plugin is complete on its own: every form plugin, Zoho app and feature listed on this page works without the add-on and always will. The add-on adds further triggers (WooCommerce, MemberPress, LearnDash, the booking plugins, Divi, an action hook for your own code, and others), further Zoho apps (FSM, People, Creator, Recruit, Projects, Sheet, Sign, Analytics, Cliq, Inventory, SalesIQ, Flow and ServiceDesk Plus Cloud), conditional logic per feed, and a Webhook destination for a URL that is not Zoho. Those triggers show here as locked tiles so you can see what they are; they are not locked on a site that has the add-on.<\/p><\/dd>\n<dt id=\"do%20i%20need%20elementor%20pro%3F\"><h3>Do I need Elementor Pro?<\/h3><\/dt>\n<dd><p>Only if you want to use Elementor forms as a feed's source. Any of the other supported plugins works without it.<\/p><\/dd>\n<dt id=\"which%20permissions%20does%20the%20plugin%20ask%20zoho%20for%3F\"><h3>Which permissions does the plugin ask Zoho for?<\/h3><\/dt>\n<dd><p>Only the ones needed by the app(s) you tick when creating the connection: CRM permissions if you picked CRM, Desk permissions if you picked Desk, and so on. Nothing is pre-selected, and no app you did not pick is requested. You can widen a connection's access later with <strong>Edit access<\/strong> on the Connections tab, which re-runs Zoho's consent screen for the updated list.<\/p><\/dd>\n<dt id=\"which%20data%20centers%20are%20supported%3F\"><h3>Which data centers are supported?<\/h3><\/dt>\n<dd><p>All of them: US, EU, India, Australia, Japan, Canada, Saudi Arabia and China. You choose the data center per connected account and the correct endpoints are used automatically.<\/p><\/dd>\n<dt id=\"where%20are%20my%20tokens%20stored%3F\"><h3>Where are my tokens stored?<\/h3><\/dt>\n<dd><p>Refresh tokens and client secrets are encrypted (AES-256-GCM) before being saved in your WordPress database, using a key derived from a per-site secret and your <code>AUTH_KEY<\/code> salt. Access tokens are short-lived and cached as transients. The plugin refuses to save credentials on a server without the OpenSSL extension rather than storing them unencrypted.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20request%20to%20zoho%20fails%3F\"><h3>What happens if a request to Zoho fails?<\/h3><\/dt>\n<dd><p>A failure that looks temporary (a network problem, a rate limit, Zoho briefly unavailable) is retried in the background a few times with an increasing delay. A failure that will never succeed on a retry (a rejected value, a bad mapping, a missing required field) is recorded immediately instead. Either way the outcome ends up on the Logs screen, and a <code>form2zoho_submission_failed<\/code> action fires when a submission is given up on.<\/p><\/dd>\n<dt id=\"is%20form%20data%20stored%20on%20my%20site%3F\"><h3>Is form data stored on my site?<\/h3><\/dt>\n<dd><p>Only if you ask for it. <strong>Store submitted values in the log<\/strong> is off by default: log entries then record the submitted field <em>names<\/em> but never their contents. Turning it on stores the values too, which is what makes the Logs screen's one-click <strong>Resubmit<\/strong> possible, and means whatever your forms collect, including personal data, is kept in the log table until those entries are deleted, by hand or by <strong>Delete log entries automatically<\/strong> (off by default). Separately, a submission awaiting an automatic retry is held briefly in a transient (see <strong>External services<\/strong> above). Access tokens, refresh tokens and client secrets are always redacted from logs.<\/p><\/dd>\n<dt id=\"my%20submission%20did%20not%20reach%20zoho.%20what%20do%20i%20check%3F\"><h3>My submission did not reach Zoho. What do I check?<\/h3><\/dt>\n<dd><p>Make sure the form has a name and that a feed points at that exact form (pick it from the dropdown). Then open <strong>FormBridge \u2192 Logs<\/strong> and look for the entry. The error text there is the reason Zoho gave.<\/p><\/dd>\n<dt id=\"how%20do%20i%20remove%20everything%20the%20plugin%20created%3F\"><h3>How do I remove everything the plugin created?<\/h3><\/dt>\n<dd><p>Turn on <strong>Erase all plugin data when the plugin is deleted<\/strong> under <strong>FormBridge \u2192 Settings<\/strong>, then delete the plugin from the Plugins screen. That drops the log table and removes every option, connection, feed and cached token belonging to this plugin, and nothing else. The setting is off by default so an accidental deactivate-and-reinstall does not destroy your setup. Deactivating alone never deletes anything; it only stops scheduled work.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0 - 15 October 2026<\/h4>\n\n<p>The plugin is now called FormBridge for Zoho, and the admin screens have been rebuilt around it. Your feeds, connections, logs and settings are untouched and no reconnection is needed; the menu is now <strong>FormBridge<\/strong>, so anywhere older documentation says Techwave Sync, look for FormBridge instead.<\/p>\n\n<ul>\n<li>Renamed throughout the interface, including the deactivation prompt, the personal-data exporter and eraser, and the test email. Zoho Campaigns and Marketing Automation now record \"FormBridge for Zoho\" as the source on new subscribers; subscribers added before this update keep the source they were recorded with.<\/li>\n<li><strong>Feeds are now created in a four-step editor<\/strong> \u2014 Trigger, Details, Destination, Mapping \u2014 instead of one long form. The trigger step shows each supported form plugin as a tile with its logo and says so when the plugin behind a tile is not running.<\/li>\n<li><strong>New Dashboard screen<\/strong>, and the plugin's navigation has moved into a header bar above every screen.<\/li>\n<li><strong>Uploaded files are sent to Zoho<\/strong> from every supported form plugin, into the file field you map them to.<\/li>\n<li>Field mapping reworked: the row for a required Zoho field is locked so it cannot be removed, a static value is checked against the kind of Zoho field it fills, \"Combine fields\" lists the fields it uses, duplicate matching only offers fields Zoho marks unique, and the field list loads once with a visible wait instead of being refetched.<\/li>\n<li>Logs: entries are now kept until you delete them, with <strong>Delete log entries automatically<\/strong> as an opt-in setting (it replaces the old fixed 30-day retention, so logs no longer disappear on their own). The screen reads a page at a time, shows times in the WordPress timezone, and reports plainly when Zoho cannot be reached.<\/li>\n<li>Zoho Campaigns and Marketing Automation: every mailing list and topic is read, not just the first page; a contact is added to the chosen list straight away; and commas and colons in submitted values are preserved.<\/li>\n<li>Connections: pick the account first and only the apps it is authorised for are offered, a Zoho Books organisation's custom modules and fields are listed, the redirect URI confirms when it is copied, and \"Zoho API console\" links to the right region's console.<\/li>\n<li>The plugin's notification emails now go through <code>wp_mail()<\/code>.<\/li>\n<li>Sources that need the Pro add-on appear as locked tiles on the trigger step, so you can see what it covers. Nothing is shown as locked on a site that already has it.<\/li>\n<li>Added hooks so a companion plugin can extend this one without patching it: <code>form2zoho_loaded<\/code> for wiring, <code>form2zoho_form_sources<\/code> to teach it another form plugin, <code>form2zoho_feed_editor_fields<\/code>, <code>form2zoho_save_feed<\/code> and <code>form2zoho_build_job<\/code> for per-feed settings, <code>form2zoho_should_deliver_feed<\/code>, <code>form2zoho_job_form_values<\/code> and <code>form2zoho_job_settings<\/code> on the delivery path, <code>form2zoho_submission_succeeded<\/code> alongside the existing failure action, and <code>form2zoho_settings_tabs<\/code> with <code>form2zoho_render_settings_tab<\/code> for the settings screen.<\/li>\n<li>Tested against WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.0.0 - 3 August 2026<\/h4>\n\n<p>Initial release.<\/p>\n\n<ul>\n<li>Send form submissions to Zoho CRM, Bigin, Books, Desk, Campaigns and Marketing Automation.<\/li>\n<li>Works with Elementor Pro Forms, Contact Form 7, WPForms, Fluent Forms, Forminator, Ninja Forms, Gravity Forms, Formidable Forms, Happy Forms and SureForms.<\/li>\n<li>Per-feed field mapping, duplicate-record protection, and organisation\/department targeting where the connected Zoho app needs it.<\/li>\n<li>OAuth 2.0 connection with encrypted token storage and automatic refresh, across every Zoho data center. Only the permissions for the app(s) you pick are requested.<\/li>\n<li>Instant delivery on submit, with automatic background retries if a first attempt fails for a transient reason. An unreachable or overloaded Zoho gives up after 10 seconds on the front end instead of holding the visitor's page; the filters <code>form2zoho_api_timeout<\/code> and <code>form2zoho_oauth_timeout<\/code> change those values.<\/li>\n<li>Live-updating Logs screen with per-entry details, bulk delete, \"Select failed\", and one-click resubmit using each feed's current configuration.<\/li>\n<li>Storing submitted values in the log is off by default; delivery logging itself stays on.<\/li>\n<li>Optional one-question feedback prompt when the plugin is deactivated. Skippable, sends only the reason, your note and the version number, never blocks deactivation, and can be turned off from <code>wp-config.php<\/code>.<\/li>\n<li>Personal-data exporter and eraser, suggested privacy-policy text, and opt-in full data erasure on uninstall.<\/li>\n<li>Fully translatable, keyboard accessible, and usable from 320px up.<\/li>\n<\/ul>","raw_excerpt":"Send WordPress form submissions to Zoho CRM, Bigin, Books, Desk, Campaigns and Marketing Automation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/354090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=354090"}],"author":[{"embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kaderoishi"}],"wp:attachment":[{"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=354090"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=354090"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=354090"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=354090"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=354090"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kea.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=354090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}