Email parser Salesforce integration for lead emails
Connect ParsedMail to Salesforce by sending its signed JSON webhook to Zapier, Make, n8n or your own REST API handler. Map the extracted fields to a Salesforce Lead, check that LastName and Company are present, and use the ParsedMail email ID as an external ID for upserts. ParsedMail reads lead emails without templates and has no native Salesforce app.
Parse an email above, then compare plans and pricing or read the API docs.
How the email parser Salesforce connection works
A Salesforce email parser workflow starts with a notification from a directory, marketplace, partner or form tool. Forward it to a ParsedMail inbox, define a typed schema and receive the result as a signed webhook. No extraction templates are needed. The lead email parsing guide covers choosing fields across different notification formats.
The event has id, type, created and data. In an email.parsed event, the email object is data, extracted fields are data.data.*, and its ID is data.id. Confidence and review status are data.confidence_avg and data.needs_review. Your automation maps these values into a Lead.
Salesforce already offers Web-to-Lead for web forms, accepting up to 500 leads in 24 hours. It does not read notification emails from directories, marketplaces or partners. Email-to-Case creates Cases, not Leads. A parser fills that email intake gap.
Which Salesforce editions and tools you need
All these connection methods require Salesforce API access, so check your edition. Enterprise, Unlimited, Performance and Developer editions include it. Professional Edition needs the API add-on. An automation subscription does not replace that requirement.
ParsedMail has no native Salesforce app. Zapier uses its Salesforce app, which is a premium app, alongside Webhooks by Zapier, also premium. Make offers Salesforce modules, and n8n offers a Salesforce node. Your own code can call the Salesforce REST API instead. Choose the route your team can maintain, including what happens when a record is rejected after the webhook has been accepted.
Map parsed fields to Salesforce Lead fields
Define separate name fields rather than relying on splitting a full name downstream. These are example schema keys you configure, not fields every email automatically contains. Missing values stay null.
| Parsed field | Salesforce Lead field | Notes |
|---|---|---|
data.data.first_name | FirstName | Use the given name when present. |
data.data.last_name | LastName | Required. Review or apply an explicit fallback. |
data.data.company | Company | Required. Review or apply an explicit fallback. |
data.data.email | Email | Use the prospect address, not the notification sender. |
data.data.phone | Phone | Keep the supplied number. |
data.data.lead_source | LeadSource | Map to your configured source values. |
data.data.request | Description | Include the inquiry for follow-up. |
Salesforce rejects a Lead without LastName or Company. Mark both required in your schema and check them before writing. If your process permits it, set [not provided] as a visible fallback in the automation. It is a workflow choice, not a company or name inferred by ParsedMail.
Set up email to Salesforce Lead creation in Zapier
Create a Zap with Webhooks by Zapier and Catch Hook. Copy its URL into a ParsedMail webhook endpoint, then forward a real lead notification so Zapier learns the field structure. Keep webhook.test events out of the Salesforce steps. The Zapier integration guide explains the trigger.
Filter for data.needs_review false and check LastName and Company. Zapier may label data.data.email as Data Data Email. Add Salesforce Find Record on Lead using your chosen identity field, then Create Record on Lead only when nothing matches. Map the contact fields and store data.id in your external ID field.
A find followed by create is not an atomic upsert. Repeated or concurrent runs need a stored event key and controlled processing. For the external ID upsert approach below, choose Make, n8n or your own receiver.
Set up the connection in Make or n8n
In Make, start with Webhooks and Custom webhook, register its URL in ParsedMail and capture a real email. Open data, then data again to map the fields. Salesforce Search Records can check for a match before Create a Record. Prefer Upsert a Record with your external ID for repeatable writes. See the Make integration guide.
In n8n, receive a POST with a Webhook node and use an If node to check review status and required values. The email address is body.data.data.email and the email ID is body.data.id. Use the Salesforce node for Lead create or upsert, choosing upsert for retry protection. Test first, then activate the workflow and register its production URL. The n8n integration guide covers webhook configuration.
Upsert directly with the Salesforce REST API
Your receiver can call PATCH /services/data/vXX.X/sobjects/Lead/<External_Id_field__c>/<value>. Configure a unique external ID field such as ParsedMail_Email_Id__c and use data.id as its value. This Python worker example uses requests after your receiver has verified and stored the event. Supply your Salesforce instance URL, access token and supported API version.
from urllib.parse import quote
import requests
def upsert_lead(event, instance_url, access_token, api_version):
if event.get("type") not in ("email.parsed",):
return
email = event["data"]
if email["needs_review"]:
return
fields = email["data"]
lead = {
"LastName": fields.get("last_name") or "[not provided]",
"Company": fields.get("company") or "[not provided]",
}
for source, target in {
"first_name": "FirstName", "email": "Email", "phone": "Phone",
"lead_source": "LeadSource", "request": "Description",
}.items():
if fields.get(source) is not None:
lead[target] = fields[source]
path = "/services/data/" + api_version + "/sobjects/Lead/"
path += "ParsedMail_Email_Id__c/" + quote(email["id"], safe="")
response = requests.patch(
instance_url.rstrip("/") + path,
headers={"Authorization": "Bearer " + access_token},
json=lead, timeout=10,
)
response.raise_for_status()Before queueing, verify ParsedMail-Signature as HMAC-SHA256 over the timestamp, a dot and the raw request body, using the endpoint secret as the key. Compare in constant time and reject timestamps more than 300 seconds from your clock. Follow the webhook documentation. Return 2xx after durable storage, and handle worker failures separately.
Avoid duplicate leads and check uncertain emails
ParsedMail suppresses duplicate emails with the same Message-ID, or the same sender, subject and body within 30 days in the same inbox. They are not parsed or sent again. Delivery retries are different. If an endpoint does not answer 2xx within 15 seconds, retries follow after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours, measured after successive failed attempts.
Every retry keeps its Idempotency-Key. Store that key to prevent repeat event processing. Upserting by the email ID prevents a retry from creating another Lead, while Salesforce duplicate rules on email provide a second guard for different messages from the same prospect.
On Growth and Scale, human review holds emails with low-confidence or missing required fields until approval, then sends corrected values. Rejected emails are not sent. Starter includes confidence scores without the review queue, so build checks in your automation and route uncertain results to a person before creating a Lead.
What the integration costs
For 800 lead emails a month, Starter covers parsing within its 1,000 email monthly allowance. It costs $49 per month, or $24 per month billed yearly, and includes webhooks. Growth costs $149 per month, or $74 per month billed yearly, with 5,000 emails per month and the review queue. Scale costs $499 per month and also includes review. Compare the ParsedMail plans against your required review workflow, not just volume.
Budget separately for Zapier or Make and Salesforce API access. A workflow that searches and then creates records involves more steps than the webhook trigger alone, so check your automation plan against the complete flow. Salesforce and Webhooks by Zapier are premium apps on Zapier. ParsedMail webhook retries do not consume extra parsed email allowance.
Frequently asked questions
Can Salesforce parse emails into leads?
How do I create a lead in Salesforce from an email?
Is there a ParsedMail app on the Salesforce AppExchange?
Do I need Salesforce Enterprise Edition?
How do I stop duplicate leads?
What happens when a lead email is missing a company?
Related
See your own email as JSON
Paste one into the demo, describe the fields and look at the result. No account needed.