Docs

Send submissions to Salesforce

Each new submission creates a Lead in Salesforce. Your Salesforce admin sets up the connection once, and this page is the guide for both of you: the admin's setup, then connecting and choosing what each form sends.

What it does

Once your Salesforce admin has done the one-time setup below, you connect Salesforce from the CalcForms web portal. Then, for each form you want, you match its answers and results to Lead fields, send a test, and switch it on. From then on, every new submission of that form creates a Lead right after it arrives: submissions from your public form link, from private invites you send, and from quotes you save in your internal view. Salesforce needs a last name and a company for every Lead.

Sending goes one way, from CalcForms to Salesforce. CalcForms creates Leads, and a retry of the same submission updates the Lead it already made, never a second one. It reads only what it needs to connect and to list your fields: the org's name, the name and permissions of the user it runs as, and the Lead fields that user can fill. It does not read your Leads or any other records, and it never deletes anything in Salesforce.

There is nothing to install from a marketplace. CalcForms connects through a small app your admin creates in your own org, running as a dedicated user your admin gives access to Leads only. If you are the one connecting CalcForms, Copy setup steps for your admin on the Connect Salesforce page copies a short version of the setup, with a link to this page.

Sending to Salesforce is part of CalcForms Pro.

What is sent, and when

Each new submission of a form you switched on, and each test you send, goes from CalcForms to Salesforce:

From CalcFormsTo Salesforce
The answers and results you matchedThe Lead fields you chose, including Last Name and Company
The submission's numberThe Lead's CalcForms Submission ID
A summary of the matched answers and results, if you keep it onThe Lead's Description

CalcForms reads only these from Salesforce:

From SalesforceUsed forWhen
The Lead fields the integration user can create and edit: names, types, lengths and picklist valuesThe Match fields listWhen you open or save a form's Send to Salesforce page
The org's name and ID, whether it is a sandbox, and the username and permissions of the user CalcForms runs asChecking the connection and showing itWhen you connect

Before you start

Who can connect

CalcForms needs Salesforce's API, which Enterprise-class editions include:

Salesforce editionCan connect
Core, Advanced, MaxYes
Enterprise, Unlimited, PerformanceYes
Developer EditionYes, for testing
Pro Suite, ProfessionalOnly with Salesforce's API add-on, which your Salesforce account executive can add
Starter Suite, Free Suite, Essentials, GroupNo. Salesforce does not offer API access on these editions.

Salesforce changes edition names; check Salesforce's own API access page if yours is not listed.

Sandboxes of the editions that can connect work too: choose Sandbox when you connect.

What you need

Set up Salesforce (your admin, once)

Screens as of September 2026. All of this happens in Setup, in your own org. If you have a sandbox, you can set it up there first; the steps are the same.

1. Create an integration user

Create a new user that only CalcForms uses, for example named CalcForms Integration. Give it the user license Salesforce Integration and the profile Minimum Access - API Only Integrations. With that profile the user works through the API only and cannot sign in to Salesforce's screens. Leads CalcForms creates show this user as their creator.

Then assign the user the permission set license named Salesforce API Integration, which lets a permission set give this user more access (step 2).

The Salesforce Integration license comes with Enterprise, Unlimited, Performance and Developer Edition orgs. If your org has none to give, or step 2 cannot give this user access to Leads, use a regular Salesforce user with a minimal profile instead. It needs the API Enabled permission and the access in step 2, nothing more, and it takes a full Salesforce license.

Do not use an admin account. When the user CalcForms runs as has Modify All Data or View All Data, CalcForms still connects but warns that a dedicated integration user is safer.

2. Give it access to Leads

Create a permission set for CalcForms, for example named CalcForms Lead access. In it:

If Salesforce asks which license the permission set is for, choose Salesforce API Integration. Assign the permission set to the integration user. CalcForms lists only the Lead fields this user can create and edit, so a field missing from Match fields usually needs Edit access here.

3. Add the CalcForms Submission ID field to Lead

In the Object Manager, open Lead and add a new custom field:

CalcForms writes each submission's number into this field, so a retry updates the Lead it already made instead of making a second one. The field does not appear in Match fields; CalcForms fills it itself.

4. Create the app

In Setup, use the Quick Find box to open App Manager, and create a new External Client App:

Save the app.

5. Set the app's policies

In Setup, open External Client App Manager, find the CalcForms app, and edit its policies:

Save the policies.

6. Send the three values

In the app's OAuth settings, use Consumer Key and Secret to see the consumer key and consumer secret; Salesforce may ask you to verify your identity first. Then open My Domain in Setup and copy your org's My Domain address, such as acme.my.salesforce.com, or acme--uat.sandbox.my.salesforce.com for a sandbox.

Send the My Domain, the consumer key and the consumer secret to the person connecting CalcForms through a password manager, never by email or chat.

A new app can take up to 30 minutes to start working. If CalcForms says Salesforce did not accept the key and secret right after setup, wait, then connect again.

Connect Salesforce

  1. Sign in to the web portal, open a form, and choose Settings, then Send to Salesforce, then Connect Salesforce. You can also open the CRM page directly at /admin/crm and choose Connect Salesforce.
  2. Choose Production or Sandbox, to match the org your admin set up.
  3. Paste the My Domain, the consumer key and the consumer secret, and choose Connect Salesforce.

CalcForms then runs these checks in order and shows the result of each. Nothing is saved until every check passes; a warning still passes.

CheckWhat it confirms
My DomainThe address is a Salesforce My Domain, ending in my.salesforce.com. A login.salesforce.com or lightning.force.com address is not accepted.
Key and secretSalesforce gives CalcForms an access token for the consumer key and secret, through the app's Client Credentials Flow and its Run As user.
OrgThe org's name, and that it is a production or sandbox org as you chose.
Runs asThe username CalcForms runs as. A user with Modify All Data or View All Data still connects, with a warning.
API access for this editionThe edition allows API access, and offers the API version CalcForms uses.
Can create Leads in SalesforceThe integration user can create Leads.
CalcForms Submission ID fieldThe Lead field exists, is a Text field marked External ID, and the integration user can edit it.

When every check passes, Salesforce is connected and you go back to where you started: the form's Send to Salesforce page, or the CRM page. The CRM page shows the connection, for example "Connected to Summit Insurance Group (Salesforce, Production) as calcforms@summit.com since Sep 23, 2026", with the date in your browser's format, and "Key ending 4F2A". CalcForms stores the key and the secret encrypted, never shows the secret again, and deletes both when you disconnect. It also keeps your org's address, which is not a secret: the links to your Leads in the portal use it.

If your admin makes a new secret, choose Replace key and secret on the CRM page and connect again. Connecting a different Salesforce org switches sending off on every form until you set each form up again.

Choose what a form sends

Open the form's Send to Salesforce page: in the portal, Settings, then Send to Salesforce, or the form's link in the Forms list on the CRM page.

Match fields

The table opens with Required by Salesforce: Last name and Company. For each, choose one of your form's text answers or Fixed text.

Then come your form's answers and results. For the first one, Your customer's email, CalcForms matches the Lead's Email field for you. If your form also has an email question (one of the email type, or one labelled Email, E-mail, Your email, Your email address or Email address), that question is not listed, because the form already collects your customer's email separately, and its answer is not sent. The exception is a question you already chose a property for, which stays listed so you can change it. For every other row, choose a Lead field or Don't send. The Example column shows what your latest submission would send. The page refuses a field of the wrong kind: a number goes to a number, text or picklist field, a date to a date, text or picklist field, a yes or no answer to a checkbox, text or picklist field, and text to a text or picklist field. A picklist that only allows its listed choices refuses any other answer when it is sent (the submission shows Failed with the picklist message below), so match such an answer to a text field unless every possible answer is one of its choices.

The first time you set up a form, before anything is saved for it, CalcForms matches the rows it recognizes for you. It matches an answer, or a result your customer sees, when its label is the same as a Lead field's and the kind fits. It also matches a text answer with a common contact label, such as Telephone to Phone or Zip code to Zip/Postal Code. For the required rows, it matches a text answer that asks for the last name or the company, such as Last name, Full name or Company name, when the form has one. When it has matched a row, the page says "CalcForms matched the rows it recognized. Check each one before you send a test." Nothing is saved until you choose Save changes or Send a test. No new submission is sent until a test goes through and you switch the form on.

The list holds the Lead fields the integration user can create and edit. Lookup fields and compound fields such as Address are not in it, but their parts, such as Street and City, are. Text longer than a field allows is cut to the field's length. If a question is later removed from the form, for example when you change the form in ChatGPT, its row moves to No longer on this form and nothing is sent for it. Saving your changes clears it.

Private results

Results marked Private are hidden from your customer on the form. On this page they start as Don't send and are never matched for you. You can still send one, for example a margin your sales team should see, but anything you send is visible to everyone who can see the Lead in Salesforce.

Options

Three boxes under the table, all on to start with:

OptionWhat it does
Use your Salesforce assignment rulesSalesforce runs your active Lead assignment rule on each Lead CalcForms creates. With it off, the rule does not run and the Lead stays with the integration user.
Send even if Salesforce flags a possible duplicate (rules set to Block still block)A duplicate rule set to alert lets the Lead through. A rule set to block still stops it, and the submission shows Failed. With the box off, an alert rule stops the Lead too.
Add a summary of the answers you send to the Lead descriptionWrites the answers and results you matched, one per line, into the Lead's Description, up to 32,000 characters. An answer or result left on Don't send is not in the summary. If you match Description to an answer yourself, your match is sent instead, and when that answer is empty on a submission the summary is written. CalcForms never matches Description for you.

Send a test

Send a test saves your changes and sends your latest submission to Salesforce as a real Lead; before the form has a submission, it sends your fixed text and the defaults above. Every test of a form updates the same test Lead, whose CalcForms Submission ID starts with test-, so delete that Lead in Salesforce when you are done. The result shows under the button, for example "Sent a test Lead for sam@example.com to Salesforce.", with a link to open the Lead in Salesforce.

Switch it on

Send new submissions to Salesforce stays off until Last name and Company are filled and a test goes through; until then the page says "Fill the rows Salesforce requires and send a test first", and while a required row is empty it says which, for example "Fill the rows Salesforce requires and send a test first. Still empty: Last name, Company." Then switch it on and choose Save changes. Only submissions that arrive after that are sent; submissions from before are not sent. Switching it off stops sending right away, and anything still waiting to be sent for that form is not sent.

What happens to each submission

Once a form has been set up to send to Salesforce, the portal shows a Salesforce column in the form's submissions, and each submission shows a Salesforce line with one of these:

StatusWhat it means
SendingCalcForms is sending it, or will try again soon. The submission shows when the last try was and when the next one is.
SentSalesforce accepted it. The submission links to the Lead.
FailedSalesforce refused it, or every try was used. The submission says why, and Try again sends it again.
Not sentNothing was sent, on purpose. The submission says why, for example that sending was not switched on for this form when it came in.

Retries. If Salesforce does not answer, is briefly busy, or reports that your org has used its API allowance, CalcForms tries again after 1 minute, 5 minutes, 30 minutes, 2 hours, 12 hours and 24 hours: 7 tries over about a day and a half. Retries are picked up every 10 minutes, so the early ones can take a little longer. When Salesforce refuses the Lead, for example because of a duplicate rule or a validation rule, trying again would not help, so the submission shows Failed at once with the reason. After you fix the cause, Try again sends it again, and starts the retries over if Salesforce does not answer.

A retry or Try again updates the Lead CalcForms already made for that submission, never a second one. If the Lead was converted in the meantime, the submission counts as Sent and the converted records are left as they are.

Daily limit. Each form can make at most 200 sends of public submissions in a 24-hour period, and HubSpot and Salesforce share that limit: a public submission sent to both counts twice, so a form that sends to both reaches it after 100 public submissions. The period starts with the form's first try to send a public submission to a CRM after the previous period ended, and ends 24 hours later. A public submission counts on its first try, even a first try that finds Salesforce disconnected and waits for you to reconnect it, and again each time you choose Try again on it. So does a submission your customer finishes after choosing Save and come back later on your public form, because it is a public submission. Automatic retries, invites you send and quotes from your internal view do not count. Submissions over the limit show Not sent, with Try again.

Edits and deletions. Edits to a submission after it was sent are not sent again. Deleting a submission or a form in CalcForms deletes nothing in Salesforce.

Disconnect

On the CRM page, choose Disconnect under Salesforce and confirm. CalcForms then:

Leads already created stay in Salesforce, and each sent submission keeps its link to its Lead. Your matched fields are kept, so after you connect again, send a test and switch each form back on.

You can disconnect even when Pro is no longer active, and when sending to Salesforce is not available for your account. In both cases the CRM page shows a Disconnect Salesforce button. If sending is not available for your account while Pro is active and Salesforce is still set up in CalcForms, the portal says "Sending to Salesforce is not available for your account right now. You can still disconnect it.", with a Disconnect Salesforce link to the CRM page. When HubSpot is set up too, it reads "Sending to HubSpot and Salesforce is not available for your account right now. You can still disconnect them."

The consumer key and secret stay valid in your org until your admin deletes the app. To revoke access completely, your Salesforce admin can delete the CalcForms app in Salesforce.

If your admin deletes the app, makes a new secret, turns off its Client Credentials Flow or deactivates the integration user before you disconnect, or a sandbox is refreshed, CalcForms notices the next time it sends, or at its weekly check while Pro is active and sending to a CRM is available to your account. The portal then says "Salesforce is disconnected. New submissions wait until you reconnect it." Connect again with the current values to send what is waiting, or disconnect in CalcForms, which deletes the stored values and marks what is waiting as Not sent.

Troubleshooting

Every message below is the exact sentence CalcForms shows.

Connecting

What you seeWhat to do
Enter your My Domain, like acme.my.salesforce.com. It is under Setup, then My Domain, in Salesforce.Paste the My Domain address from step 6, not login.salesforce.com or a lightning.force.com address.
Salesforce did not answer at this My Domain. Check the address, then try again.Check the address for typos, and that Production or Sandbox matches it.
Salesforce did not accept the key and secret. A new app can take up to 30 minutes to start working, so try again then.Wait up to 30 minutes after creating the app. If it still fails, copy the key and secret again from the app (step 6); the secret may have been replaced.
Salesforce did not accept the sign-in: the app's Client Credentials Flow is off. Ask your Salesforce admin to turn it on, then try again.The flow must be on in both the app's OAuth settings (step 4) and its policies (step 5).
The app has no Run As user. Ask your Salesforce admin to set one in the app's Client Credentials Flow policy, then try again.Step 5.
This is a sandbox org. Choose Sandbox, then try again.
This is a production org. Choose Production, then try again.
Choose the environment that matches the My Domain.
This Salesforce edition does not allow API access. Ask your Salesforce admin about the API add-on, then try again.See Who can connect.
This Salesforce org does not offer the API version CalcForms uses yet. Ask your Salesforce admin, then try again.Email us with your org's edition.
Salesforce cannot create Leads with this user. Ask your admin to give the integration user the Lead permissions, then try again.Step 2, and that the permission set is assigned to the integration user.
The CalcForms Submission ID field is missing. Ask your admin to add it (the steps are in the setup guide), then try again.Step 3.
The CalcForms Submission ID field is not set up the way CalcForms needs. Ask your admin to check it against the setup guide, then try again.The field must be Text, marked External ID, and editable by the integration user (steps 2 and 3).
Runs as: admin@summit.com. This is an admin account; a dedicated integration user is safer.A warning: the connection works. To follow it, set up the user in steps 1 and 2, make it the app's Run As user, and connect again.
Could not connect to Salesforce: too many connection attempts in a short time. Try again in an hour.Wait an hour, then connect again.

Sending

What you seeWhat to do
Salesforce is disconnected. New submissions wait until you reconnect it.
On a submission: Waiting for you to reconnect Salesforce. It will be sent once Salesforce is connected again.
Salesforce no longer accepts the saved key and secret. Ask your admin what changed, then choose Reconnect Salesforce and connect with the current values. When you reconnect the same org, what was waiting is sent.
Could not send to Salesforce: too many submissions were sent in a short time. It will be tried again in 30 minutes.Your org's API allowance is used up for now, or Salesforce asked CalcForms to slow down. Nothing to do: CalcForms keeps trying on the schedule under Retries, and the time in the sentence is when the next try is due.
Could not send to Salesforce: Salesforce found a matching Lead and its duplicate rule blocked a new one. Open the matching Lead in Salesforce, or change the rule, then try again.A duplicate rule set to block stopped it. Work with the matching Lead, or ask your admin to change the rule, then choose Try again.
Could not send to Salesforce: your Salesforce requires a field this form did not fill. Match an answer or fixed text to it on the Send to Salesforce page, then try again.Your org requires a Lead field this form does not fill. Match an answer to it on the form's Send to Salesforce page, or ask your admin whether it must be required, then choose Try again.
Could not send to Salesforce: a validation rule in your Salesforce refused the Lead. Check the rule or the matched fields, then try again.Ask your admin which rule refused it, fix the match or the rule, then choose Try again.
Could not send to Salesforce: an answer is not one of the choices a Salesforce picklist allows. Match that answer to another field, then try again.Match the answer to a text field, or ask your admin to add the value to the picklist, then choose Try again.
Could not send to Salesforce: an answer is longer than the Salesforce field allows. Match it to a longer field, then try again.Match the answer to a longer field, then choose Try again.
Could not send to Salesforce: a matched field no longer exists in Salesforce. Check the matched fields, then try again.The field was deleted or renamed, or the integration user lost access to it. Choose another field on the form's Send to Salesforce page, save, then choose Try again.
Could not send to Salesforce: the Salesforce user CalcForms runs as cannot create Leads. Ask your Salesforce admin to give it the Lead permissions, then try again.Step 2.
Could not send to Salesforce: Salesforce no longer accepts the connection. Reconnect Salesforce on the CRM page, then try again.Salesforce refused the saved key and secret on the last try. Ask your admin what changed, reconnect Salesforce on the CRM page with the current values, then choose Try again.
Could not send to Salesforce after 7 tries over about a day and a half: Salesforce did not answer. Try again.Salesforce was unavailable or busy for the whole retry period. Choose Try again.
Could not send to Salesforce after 7 tries over about a day and a half: too many submissions were sent in a short time. Try again.Your org's API allowance stayed used up, or Salesforce kept asking CalcForms to slow down, for the whole retry period. Choose Try again.
Could not send to Salesforce after 7 tries over about a day and a half: CalcForms could not finish sending it. Try again, and if it keeps failing, reconnect Salesforce.A problem on our side stopped the last try. Choose Try again. If it fails again, reconnect Salesforce on the CRM page, and email us with the form link and the submission number.
Could not send to Salesforce. Try again, and if it keeps failing, reconnect Salesforce.Choose Try again. If it fails again, reconnect Salesforce on the CRM page, then try again.

Not sent

What you seeWhat it means
Not sent: sending to Salesforce was not switched on for this form when this submission came in.Sending to Salesforce was off for this form when the submission came in, so CalcForms never tried to send it. Submissions from before you first switched the form on show this line, and so do any that came in while it was switched off.
Not sent: sending to Salesforce was switched off for this form.It was waiting when the form was switched off, or when sending to a CRM stopped being available to your account.
Not sent: Salesforce was not connected when this submission came in.Salesforce was disconnected, or a different org was connected, before it was sent. Set the form up again on the CRM page.
Not sent: the CRM connection was off while Pro was inactive.Choose Try again once Pro is active.
This form has reached its daily limit of 200 sends to Salesforce. It can send again 24 hours after the first of them.
With both CRMs: This form has reached its daily limit of 200 sends to your CRMs; a submission sent to both HubSpot and Salesforce counts twice. It can send again 24 hours after the first of them.
The form reached its daily limit (see Daily limit, under What happens to each submission). The 24-hour period started with this form's first try to send a public submission to a CRM after the previous period ended; choose Try again after it ends.
Not sent: sending to Salesforce was not available when this submission came in.A problem on our side. Email us with the form link and the submission number.

Support

Email hello@badabingapp.cc with the form's link and the submission number, for example #1042 from the portal. For help setting it up, email us or book a 30-minute onboarding call; see /support.