Set the sender option to the assigned user, then use sender merge fields in the body. Pardot is now called Account Engagement. What breaks is data: the rep's user record must be complete and the prospect needs an owner.
TL;DR
- Set the sender to the prospect's assigned user under Send and Reply options, then add sender merge fields to the body. About 30 to 45 minutes.
- Add an HML fallback so an empty sender field never prints blank.
- Sizing the target list with LeadOcean costs 0 records. Pulling one 25-row sample page costs 25.
Prerequisites
- An Account Engagement (Pardot) account with the Lightning email builder.
- Prospects (Salesforce leads or contacts) that each have an assigned user who is a real rep.
- Salesforce user records with first name, last name, email and title filled in.
- A LeadOcean API key in
$LEADOCEAN_API_KEY(free plan, no card).
Step 1: Choose the sender option
Open the email, go to the Send screen, then Send and Reply options. Account Engagement offers a general user, a specific user, the assigned user (the prospect's owner), and the account owner. The Lightning builder adds an Account CRM user custom field and a Prospect CRM user custom field (Salesforce Ben, September 2026).
Pick by what you want the reader to see:
| Goal | Sender option |
|---|---|
| Mail from the rep who owns the lead | Assigned user |
| Mail from the owner of the company | Account owner |
| Mail from a customer success manager | Account CRM user custom field |
| One named sender for everyone | Specific user |
Assigned user is the default choice for sales outreach. Use the custom field options only when the sender is not the owner.
Step 2: Add sender merge fields to the body
Sender fields live in the sender section of the merge field picker. They pull values from the user record of the selected sender. Picking one drops a tag wrapped in {{ }} into the body, such as {{Sender.FirstName}} (Salesforce Ben, September 2026).
I'm {{Sender.FirstName}} from Acme. I lead the team that works with
companies your size.
{{Sender.FirstName}}Insert every other field (last name, title, phone, signature) from the picker rather than typing it, so the tag matches your account. The old split between user tags and assigned user tags is gone: the sender set in Send and Reply options now drives both the From line and the sender fields.
Step 3: Add a fallback for empty fields
If the sender's user record lacks a name or title, the merge field has nothing to print. Fix the data first: find active users with empty fields in Salesforce.
SELECT Id, FirstName, LastName, Email, Title
FROM User
WHERE IsActive = true AND (FirstName = null OR Title = null)Then add a fallback for the cases you cannot fix. HML supports IF/ELSE statements with a fallback value when a field is missing on the sender's record (Salesforce Ben, September 2026). Build the statement from the HML reference in Salesforce Help, then test it with a prospect that has no assigned user.
Step 4: Size the audience with LeadOcean before you build the list
A sender field only helps if the list is right. Count first. Counts are free and spend no records. Send count=true as a query parameter with limit=1 (openapi.json, September 2026).
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobFunction": ["Sales & Business Development"],
"jobLevel": ["VP"],
"technologies": ["Pardot"],
"limit": 1
}'The free MCP tool leadocean_count_leads returned this on 2026-10-21.
{
"total": 23126,
"totalIsExact": true,
"totalAll": 48976,
"distinctCompanies": 4844
}That is 23,126 sales VPs across 4,844 companies where we detect Pardot. The count uses the default filter: verified or catch-all email only. The totalAll of 48,976 has no email condition.
Step 5: Pull a sample page
When the count looks right, pull one page. Filters are arrays, limit is 1 to 100, and you page with cursor. This spends one record per person returned.
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobFunction": ["Sales & Business Development"],
"jobLevel": ["VP"],
"technologies": ["Pardot"],
"country": ["US"],
"limit": 25
}'Search rows carry no contact points. Enrich the rows you keep (Step 6), then import them as prospects and assign users. The assigned user option reads the prospect's assigned user, so assign before you send.
Step 6: Fill a missing owner field with an enrichment
Prospects without a clean title or company are common after an import. Enrich by email. The endpoint takes exactly one of linkedin_url, email, phone or person_id. A person we hold nothing for returns a 404 and costs nothing.
curl -s -X POST "https://api.leadocean.io/v1/people/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "jane.doe@acme.com"}'Use the returned title and company to route the prospect to the right rep. Do the routing in Salesforce, not in the email.
Step 7: Test before you send
Send a test to yourself from a prospect owned by a real rep. Then send one from a prospect with no assigned user. Compare the From line and the signature.
Check three things before the real send:
- The From name and address are the rep's, not the default sender.
- The signature fields are filled, with no blank lines.
- The reply goes to the rep, not a shared inbox.
Which sender option wins
For sales outreach, use the assigned user. It keeps replies with the person who owns the deal, and it needs no extra custom fields. Use a specific user only for one-off announcements. Use the CRM user custom fields when customer success or an SDR must send for an account owned by someone else.
If your assigned users are a mix of reps and shared or default users, fix assignment first. A sender field can only print what the sender's user record holds.
What you get
A search page from Step 5. Response shape from the API reference, with placeholder values.
{
"success": true,
"data": [
{
"profile_data": { "profile_full_name": "Jane Doe" },
"contact_data": {
"has_email": true,
"has_phone": true,
"email_status": "verified",
"contact_current_experiences": [ { "job_title": "VP Sales", "company_name": "Acme" } ]
},
"meta": { "source_ids": { "person_id": "1234567890" } }
}
],
"meta": { "count": 1, "nextCursor": "..." }
}Search rows hold flags (has_email, has_phone, email_status), not addresses. Send meta.source_ids.person_id to POST /v1/people/enrich to get the address for a row you keep.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| Sender field prints blank | Sender's user record missing name, email or title | Complete the user record, add an HML fallback |
| Email sends from the wrong person | Prospect has no assigned user, or a shared one | Assign a rep before sending |
| 401 from LeadOcean | Missing or wrong x-api-key | Check $LEADOCEAN_API_KEY |
| 429 from LeadOcean | Above the plan's rate limit (5 a second on Free, 200 on Agency) | Honour Retry-After, or move up a plan |
| 402 from LeadOcean | Out of records | Free is 1,000 records for life. See pricing |
| Empty results | A bad enum value, such as VP Sales for jobLevel | Use exact values: C-Team, VP, Director, Manager, Staff, Other |
FAQ
What is the difference between assigned user and account owner?
The assigned user is the owner of the prospect (lead or contact) record. The account owner owns the company record. They are often different people.
Can I send from someone who is not the owner?
Yes. Use a specific user, or the Lightning builder's Account CRM user custom field or Prospect CRM user custom field with a lookup to a user.
Does counting on LeadOcean cost records?
No. A count, a breakdown and an empty page cost nothing. One person returned by a search is one record.
Where do I write the email itself?
Start from the guidance in how to design a personal sales email and the personalized sales email templates. If you are choosing a sending tool, see best cold email software for B2B sales outreach. More guides are on the blog.
Build the Pardot list before you set the sender
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →