The connector only knows how to create
Built and tested with data that had never been submitted before, so nobody noticed the missing lookup. Every returning applicant, patient or donor becomes a new record.
The Salesforce connector can prefill from existing records, search before it writes, create across parent and child objects, and hand you a log when something fails. Most instances use about a third of that. Twopir Consulting configures the rest — the lookup rules, the multiple-record handling, the conditional writes and the recovery path. Match first, write second, log always.
Trusted by 500+ organizations — including healthcare, higher education, nonprofit and financial services teams whose Salesforce records start life as a form submission.










Built for Regulated Data Collection
Each of these gets reported as bad CRM data and fixed with a deduplication tool or a cleanup project. The cause is upstream, in a connector configured for the day it was built. Cleaning the records without changing the connector just schedules the next cleanup.
Built and tested with data that had never been submitted before, so nobody noticed the missing lookup. Every returning applicant, patient or donor becomes a new record.
Matching on email alone returns a household, a shared inbox or a person who appears twice already. Without an explicit rule for the multiple-records case, the connector picks one or fails.
Options typed into the form when it was built. A programme ends, a campaign is renamed, a location closes — and submissions start arriving with values Salesforce will not accept.
A related object written unconditionally, even when the respondent skipped that section. The related list fills with blanks and the reports built on it stop being trusted.
Every run is recorded and failed responses can be reprocessed, but only if someone looks. Submissions sit in FormAssembly having never reached Salesforce, sometimes for months.
Record types, field-level security and sharing rules apply to the connector exactly as they do to a person. A permission tightened for good reasons breaks a mapping nobody associated with it.
The FormAssembly Salesforce connector reads from and writes to Salesforce around a submission. It can prefill a form from existing records including related objects, build dropdowns from live Salesforce values, search for a matching record before deciding whether to create or update, write across parent and child objects in one submission, create records only when a condition is met, and log every run so a failure can be corrected and reprocessed. Configuring it properly is integration work with a form-shaped interface, and it is where most of the value — and most of the damage — actually sits.
Where this page stops. This page is the Salesforce connector at depth. Sequencing several connectors across one submission, and deciding which system owns which field, is FormAssembly integration services. Reaching a system with no connector at all is FormAssembly API and custom integrations. What happens inside a single submission before the connector runs — logic, calculations, signature, payment — is FormAssembly form automation. Standing the platform up for the first time is FormAssembly implementation services.
What Twopir does, and what the product does. Prefill, lookups, multiple-record settings, dynamic picklists, conditional creation, connector logs and reprocessing are FormAssembly capabilities — the vendor built them. What we contribute is the design: which fields identify a person in your business, what happens when the lookup is ambiguous, which related records should exist, and who is told when a write fails. As a Salesforce Partner we can also change the Salesforce side when that is where the real fix belongs. Product documentation is the FormAssembly Resource Center.
None of these require code. All of them require a decision about your data that somebody has to make deliberately before the mapping is built.
Stop asking people for data you already hold. A prefilled form is faster to complete and produces cleaner data, because confirming beats retyping.
The single highest-value configuration on this page. Search before you write, and decide in advance what an ambiguous match means.
Dropdowns built from live Salesforce data instead of a copy that silently goes stale the week after launch.
One submission often means several records. Which ones should exist is a business rule, and it belongs on the connector.
Failures are inevitable. Whether they are noticed and recoverable is a configuration choice.
The connector is a Salesforce user. It is subject to everything a user is subject to, and it breaks the same way.
These are the patterns we find most often in a connector audit. They are offered as a starting point for your own admin, not as a substitute for reading the connector log.
| Symptom | Usual cause | Where the fix belongs |
|---|---|---|
| Duplicate Contacts after every campaign | No lookup before the write, or matching on a field that is not unique. | Connector — add the lookup and define the multiple-records behaviour. |
| Submissions missing from Salesforce entirely | Connector failed after the respondent was already redirected. | Connector stage placement, plus a routine that reads the log. |
| Errors naming a field the form does not show | A Salesforce validation rule or a newly required field. | Salesforce — or the mapping, if the form should be collecting it. |
| Errors mentioning a value that no longer exists | A static picklist copy in the form, retired in Salesforce. | Connector — replace with a dynamic picklist. |
| Related lists full of blank child records | Child objects created unconditionally on every submission. | Connector — make creation conditional on real input. |
| Worked for a year, broke without a form change | A record type, permission or sharing change on the integration user. | Salesforce, then change control so it does not recur. |
Durations describe typical engagements and depend on how many forms and objects are in scope. You get a fixed shape after stage one.
Every connector, its stage, its mapping, and the last months of log history — which is where the failures nobody actioned are recorded. One week.
What identifies a person or organization in your business, what an ambiguous match means, and which related records should exist. Agreed in writing. One week.
Lookups, conditional writes, dynamic picklists and error handling built against a sandbox org, never against production. One to three weeks.
Duplicates, ambiguous matches, rejected validations, retired picklist values, permission gaps and failed uploads — each one run deliberately. One week.
Promotion to production, reprocessing of recoverable historical failures, a field-dependency register, and change control with whoever owns the org. One week.
The engagement below is Twopir's own, on the same architectural problem this page describes: an inbound enquiry becoming a Salesforce record automatically, with its source attached. Beside it, how one organization describes building forms against Salesforce in FormAssembly's own customer story.
Automatic record creation on every qualifying enquiry, with campaign source carried through to closed revenue.
FormAssembly is a very high-utility tool for us because it’s plug-and-play. It would take us a significant amount of dev effort to build internally in Amazon, and we’d also spend a good amount of bandwidth maintaining that tool. With FormAssembly, you can just log in to Salesforce and create whatever forms you need.
We help growing and mid-market companies solve complex CRM, integration and business system challenges, and we work with enterprise organizations on the same problems at larger scale.
As a Salesforce Partner we read connector errors as Salesforce errors, because most of them are. Validation rules, record types and sharing are our home ground.
What makes two submissions the same person is a business question, not a technical one. Answering it first is what prevents the deduplication project a year later.
The last few months of connector history usually names the problem precisely, and often turns up recoverable submissions that can be reprocessed on the spot.
Connector work writes real records. Building against production means testing with live data, which is how test submissions end up in a report someone presents.
A list of what each connector depends on, so the next validation rule or retired picklist value is caught in review rather than in production.
With a lookup that runs before the write, and an explicit decision about what happens when it finds nothing, one record, or several. The connector can search Salesforce on whatever combination of fields identifies a person in your business, then create or update depending on the result — and each lookup carries settings for the multiple-records case. The failure we see most often is a connector configured only to create, because it was built and tested with data that had never been submitted before. Deduplication is a design decision made before mapping, not a cleanup job afterwards.
Yes. A prefill connector reads existing Salesforce data when the form opens, so a known person is not asked for what you already hold. It can pull from related objects and records as well as the primary one, and a single URL parameter can drive a prefill that reaches across several objects — which keeps the link short while the connector does the work. Prefill is also a data-quality control, not just a convenience: a respondent confirming existing values produces far cleaner records than one retyping them.
A dynamic picklist builds a form's dropdown options from live Salesforce data instead of a list typed into the form. Options can come from a Salesforce picklist or from a live lookup based on other fields on the form. Use them wherever the list changes without anyone remembering to update the form — programmes, campaigns, locations, product catalogues, assigned staff. Static copies of those lists are the usual reason a submission arrives with a value Salesforce no longer accepts.
Yes. Record creation can be made conditional, so a submission writes an object only when the data warrants it — a skip formula on the connector step is the usual mechanism. This matters for related records: creating an empty child object on every submission because a section was left blank produces a Salesforce report nobody trusts. The condition belongs on the connector rather than in the form, because it is a statement about the record, not about what the respondent sees.
It depends on the stage the connector runs in and the error-handling option chosen. The connector logs every run, and a failing step can be configured to end execution and return an error rather than letting later steps continue against a record that was never created. A failed response can be corrected and reprocessed afterwards, in bulk on Essentials plans and above. The design decision is who finds out: a connector in the after-submitted stage runs once the respondent has already seen the thank-you page, so nothing tells them, and only monitoring will.
Almost always because Salesforce changed, not FormAssembly. A retired picklist value, a newly required field, a tightened validation rule, a changed record type or a permission adjustment on the integration user will all stop a mapping that was correct when it was built. Nothing in the form changed, so the form is the last place anyone looks. The fix is usually in Salesforce, and the durable fix is a change-control habit: whoever owns the org needs to know which fields a connector depends on.
Both are supported and the choice is organizational rather than technical. FormAssembly's AppExchange app lets users reach their FormAssembly account from inside Salesforce without a separate login, which suits teams who live in the CRM and want form building next to the records. Working in FormAssembly directly suits teams whose form builders are not Salesforce users — marketing, programme or admissions staff. The connector behaves the same way either way, so this is a question about who builds forms, not about capability.
Open your busiest form's connector and see whether there is a lookup before the create step. If there is not, you already know where your duplicate records come from — and that is a configuration change, not a cleanup project.
Or contact the team — a Salesforce Partner that treats forms as part of the org