Skip to content
ParsedMail

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.

Try a sample

No account or card. Demo emails are deleted after 24 hours.

Parse an email above, then compare plans and pricing or read the API docs.

Sales representative reviewing an incoming lead at a desk

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 fieldSalesforce Lead fieldNotes
data.data.first_nameFirstNameUse the given name when present.
data.data.last_nameLastNameRequired. Review or apply an explicit fallback.
data.data.companyCompanyRequired. Review or apply an explicit fallback.
data.data.emailEmailUse the prospect address, not the notification sender.
data.data.phonePhoneKeep the supplied number.
data.data.lead_sourceLeadSourceMap to your configured source values.
data.data.requestDescriptionInclude 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?

Salesforce does not read lead notification emails through Web-to-Lead or Email-to-Case. Web-to-Lead handles web forms, while Email-to-Case creates Cases. Use ParsedMail to extract typed fields from directory, marketplace or partner emails, then send them to Salesforce through an automation tool or your own API handler.

How do I create a lead in Salesforce from an email?

Forward the email to a ParsedMail inbox and map its webhook fields to a Salesforce Lead. Use Zapier, Make, n8n or your own REST API handler. Check LastName and Company before writing, and use an external ID upsert to make repeated deliveries safe.

Is there a ParsedMail app on the Salesforce AppExchange?

No, ParsedMail has no native Salesforce app. Connect its signed webhook through the Salesforce app in Zapier, Salesforce modules in Make, the Salesforce node in n8n or your own code. All of these routes require Salesforce API access, so check your edition before setting up the connection.

Do I need Salesforce Enterprise Edition?

No, Enterprise is not the only edition with API access. Unlimited, Performance and Developer editions also include it, while Professional Edition needs the API add-on. Check your edition before choosing Zapier, Make, n8n or a direct REST API integration, because each route needs that access.

How do I stop duplicate leads?

Upsert by an external ID containing the ParsedMail email ID so a retry targets the same Lead. Store the Idempotency-Key to avoid processing the same event again. Salesforce duplicate rules on email are a second guard when different notification emails refer to the same prospect.

What happens when a lead email is missing a company?

Salesforce rejects a Lead without Company or LastName, so check both before writing. Configure them as required schema fields and use the Growth or Scale review queue, or apply an explicit fallback such as [not provided]. On Starter, route uncertain results to a person in your automation.

Related

See your own email as JSON

Paste one into the demo, describe the fields and look at the result. No account needed.