Sending email from PageFly is possible, but it is not a one-click native integration. The reliable route is to use PageFly’s Shopify Customer Form to create a Shopify customer, use Shopify Flow to react to that customer event, and send the email through Volanea’s REST API with a server-side secret.
This matters because PageFly is a Shopify page builder, not an outbound-email automation platform. It can collect lead data on a landing page, but it does not provide a native Volanea app, a PageFly marketplace plugin, or a built-in server-side webhook action for delivering arbitrary HTTP requests. Building around Shopify’s customer and workflow events keeps the API key out of the storefront while giving you a repeatable trigger for welcome emails, lead follow-ups, discount delivery, and internal notifications.
The PageFly-to-Volanea architecture
The safest implementation has four pieces:
- A PageFly Customer Form on the published PageFly page.
- A unique Shopify customer tag, applied by that form, such as
pagefly-lead. - A Shopify Flow workflow triggered by Customer created and filtered to that tag.
- A Shopify Flow Send HTTP request action that posts the mapped customer data to Volanea’s
POST /v1/sendendpoint.
The customer’s form submission is the real storefront event. The PageFly Customer Form writes the submitted data to Shopify Customers; PageFly documents that Customer Form submissions appear in Shopify Admin’s Customers area. Shopify Flow then sees the new customer record and starts the workflow.
That distinction is important. PageFly does not emit a documented outbound webhook payload when a visitor presses Submit. The form submits into Shopify’s customer system. The JSON payload in this setup is constructed by Shopify Flow from the newly created Shopify customer object, rather than being an undocumented payload guessed from PageFly’s browser code.
The resulting sequence looks like this:
Visitor submits PageFly Customer Form
-> Shopify creates customer profile with pagefly-lead tag
-> Shopify Flow: Customer created trigger
-> Flow condition: customer has pagefly-lead tag
-> Flow Send HTTP request action
-> Volanea POST /v1/send
-> Volanea queues and sends the transactional email
This approach is deliberate rather than merely convenient. It lets PageFly remain responsible for the page experience, Shopify remain the system of record for lead details and consent context, and Volanea remain responsible for the transactional email send.
What actually triggers the email in PageFly
The PageFly element to use is Customer Form, not Contact Form.
A PageFly Contact Form sends an inquiry to the sender email configured in Shopify notifications. That can be useful for support messages, but it does not create the customer record needed for the Shopify Flow pattern in this guide. Its data path is designed for merchant inbox notifications, not for a dependable lead-triggered email workflow.
A PageFly Customer Form, on the other hand, is designed to collect customer information. It supports Customer Form Field elements for Email, First Name, Last Name, and Customer Note. PageFly also lets you configure Shopify Customer Tags on the Customer Form.
Configure the PageFly Customer Form
In the PageFly editor:
- Open the Element Catalog.
- Select the Shopify tab.
- Add a Customer Form to the landing page.
- Add at least the Email Customer Form Field. A Customer Form requires an email field to function.
- Optionally add First Name, Last Name, and Customer Note fields.
- In the Customer Form’s settings, set Shopify Customer Tags to a unique routing tag, for example
pagefly-lead. - Configure a clear success message and, if useful, a redirect after submission.
- Publish the PageFly page.
Use a tag that is specific to this one form or campaign. Do not use a broad tag such as newsletter if other forms, checkout flows, imports, or staff actions may apply it. The tag is the guardrail that tells Flow, “this customer came from this PageFly lead capture.”
A useful convention is:
pagefly-lead
pagefly-spring-launch
pagefly-wholesale-interest
pagefly-download-guide
The more specific the tag, the less likely an unrelated customer creation will send the wrong email.
The concrete trigger name
The workflow trigger is Shopify Flow’s Customer created trigger. It runs only for a newly created customer profile; editing an existing customer does not run it. That has a practical consequence: a visitor who submits the PageFly form with an email address that already belongs to a customer will not create a new customer and therefore will not start this exact workflow.
For a simple lead magnet or first-time welcome email, that behavior is often correct. For a campaign that must send whenever a known customer submits a form again, use a different architecture, such as a dedicated form product that writes a new record, a custom form endpoint, or an automation tool designed to receive every submission. Do not assume Customer created means “every PageFly form submit.” It means exactly what it says: a new Shopify customer was created.
Plan requirements and the direct HTTP option
The direct route in this guide uses Shopify Flow’s Send HTTP request action. Shopify documents that this action is available on Shopify Plus, Advanced, or Grow plans.
If your Shopify plan does not include Send HTTP request, PageFly still has no native outbound webhook feature to substitute for it. In that case, use a middleware or automation route instead:
PageFly Customer Form
-> Shopify customer creation
-> Zapier or Make watches new Shopify customers
-> filter for the pagefly-lead tag
-> webhook or HTTP module calls Volanea
Zapier supports Shopify customer-based workflows and webhook actions. Make can serve the same role with a Shopify trigger and HTTP module. The operational requirements remain the same: filter on the PageFly-specific tag, map fields deliberately, store the Volanea secret in the automation platform’s credential store, and provide a stable idempotency key.
The rest of this guide focuses on direct Shopify Flow because it minimizes systems in the path and lets Flow store secrets in encrypted, obfuscated configuration rather than exposing them in browser JavaScript.
Build the Shopify Flow workflow
Install Shopify Flow if it is not already available in your Shopify admin. Then create a new workflow with one trigger, one condition, and one send action.
Step 1: Add the Customer created trigger
Start a new workflow and choose Customer created as the trigger.
Remember that Shopify also creates customers through checkout, manual admin work, imports, and apps. A workflow that sends email immediately after every Customer created event is too broad for most stores. The next condition narrows the workflow to the PageFly form.
Step 2: Filter on the PageFly customer tag
Add a condition that checks whether the new customer’s tags include pagefly-lead.
Only the true branch should continue to the email request. The false branch should end without taking action.
This condition prevents several expensive and confusing mistakes:
- An order-created customer receives a lead-magnet welcome email.
- A staff-created customer gets an automated campaign intended for landing-page visitors.
- An imported customer record sends a historical email burst.
- A customer created by another app is incorrectly attributed to PageFly.
Before activating the workflow, submit the published PageFly form using a test address and inspect the new Shopify customer. Confirm that the customer has the expected tag, email address, and name fields. Testing the data record first saves time debugging a Flow that is actually behaving correctly against missing or mismatched tags.
Step 3: Store the Volanea secret in Flow
Create a Volanea secret key with only the access your sending workflow needs. Then add it as a secret in Shopify Flow’s HTTP request configuration rather than pasting it into a page script, form field, PageFly custom JavaScript box, redirect URL, or public theme setting.
The secret belongs in the Flow action’s encrypted secret configuration and is used only in the Authorization header:
Authorization: Bearer <your Volanea secret key>
Never put this key in PageFly Custom JavaScript. PageFly’s custom code editor runs JavaScript in the shopper’s browser. Any secret included there can be viewed in the page source, browser developer tools, or network requests, then copied and used to send mail from your account. It can also create a CORS problem: a browser is not the right place to call a privileged email-sending API.
If you cannot use Shopify Flow secrets on your plan, put the Volanea key in a server-side environment variable in your own middleware, Zapier connection, Make connection, Cloudflare Worker secret, or serverless-function secret store. The rule is simple: the browser may submit lead data, but it must never hold mail-sending credentials.
The payload Flow sends to Volanea
The PageFly Customer Form stores data in Shopify first. From there, Shopify Flow constructs the outbound JSON body with the customer fields available to the Customer created trigger.
Use these field mappings for a straightforward welcome email:
| Shopify Flow customer field | Volanea field or email content | Purpose |
|---|---|---|
customer.email | to | Recipient email address |
customer.firstName | greeting and text body | Personalized first name |
customer.lastName | optional metadata | Lead context for logs |
customer.id | Idempotency-Key and metadata | Stable unique identifier for the customer event |
PageFly tag pagefly-lead | Flow condition and tags | Attribution and routing |
Configure the Flow Send HTTP request action as a POST request to:
https://api.volanea.com/v1/send
Set these headers in the action:
Authorization: Bearer {{ secrets.VOLANEA_API_KEY }}
Content-Type: application/json
Idempotency-Key: pagefly-customer-{{ customer.id }}
The exact secret token syntax shown by Flow can vary with its secret picker interface. Select the stored secret from the UI instead of typing a literal API key. The important parts are the Authorization: Bearer scheme and the stable idempotency key derived from the customer identifier.
Use the following body in the Flow action. This is the actual JSON payload Flow sends to Volanea after it evaluates the Liquid variables:
{
"from": "hello@your-verified-domain.com",
"fromName": "Your Store",
"to": "{{ customer.email }}",
"subject": "Welcome — here is your next step",
"text": "Hi {{ customer.firstName | default: 'there' }}, thanks for signing up. We will be in touch shortly.",
"html": "<p>Hi {{ customer.firstName | default: 'there' }},</p><p>Thanks for signing up. We will be in touch shortly.</p>",
"type": "transactional",
"tags": ["pagefly-lead"],
"metadata": {
"source": "pagefly-customer-form",
"shopifyCustomerId": "{{ customer.id }}",
"firstName": "{{ customer.firstName }}",
"lastName": "{{ customer.lastName }}"
}
}
Replace hello@your-verified-domain.com with an address on a domain verified in Volanea. A verified sender domain is not optional housekeeping; it is the identity from which Volanea can send your message. Keep the From address consistent with your storefront brand, and make sure the reply path is monitored if recipients might respond.
The equivalent Volanea REST call
The following cURL request shows what Shopify Flow is effectively doing. It is also useful for testing the sender domain, key, content, and basic account permissions before you activate the Flow.
curl --request POST "https://api.volanea.com/v1/send" \
--header "Authorization: Bearer $VOLANEA_API_KEY" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: pagefly-customer-1234567890" \
--data '{
"from": "hello@your-verified-domain.com",
"fromName": "Your Store",
"to": "test-recipient@example.com",
"subject": "Welcome — here is your next step",
"text": "Hi Jamie, thanks for signing up. We will be in touch shortly.",
"html": "<p>Hi Jamie,</p><p>Thanks for signing up. We will be in touch shortly.</p>",
"type": "transactional",
"tags": ["pagefly-lead"],
"metadata": {
"source": "pagefly-customer-form",
"shopifyCustomerId": "1234567890",
"firstName": "Jamie",
"lastName": "Lee"
}
}'
Volanea’s single-message endpoint is POST /v1/send. It supports Bearer authentication and an Idempotency-Key header, which is particularly important when the upstream automation retries a request.
For more request fields, sender setup guidance, templates, and response handling, use the Volanea email API reference and setup guides.
Why idempotency is mandatory here
Email APIs are side-effecting APIs: a successful POST can create a message that a recipient sees. The difficult failure case is not a clean error. It is a timeout after the upstream platform has already handed the request to Volanea but before the upstream platform receives the response.
Without duplicate protection, Flow may retry and generate a second send. The customer sees two “Welcome” emails, and your team sees a confusing pair of email records. With a stable Idempotency-Key, Volanea can recognize a repeated request for the same logical send and replay the original result instead of creating another message.
Do not generate a new random key on each retry. That defeats the entire safeguard. Use a key that is stable for one intended action, such as:
pagefly-customer-{{ customer.id }}
That key means “send the PageFly welcome email for this newly created Shopify customer.” If you later build a different email trigger for the same customer, give it a different namespace, for example pagefly-guide-download-{{ customer.id }}.
A stable key also improves debugging. When an automation run is retried, you can search logs and correlate the Flow run, Volanea request, customer record, and email result around one durable identifier.
Personalization, consent, and message type
A PageFly landing-page form often sits near the boundary between transactional messaging and marketing. Do not let the implementation blur that distinction.
A transactional message is tied to a specific action or requested service, such as delivering a requested resource, confirming a signup, or sending account access information. A promotional campaign is designed to market products or offers. The label you use in the API does not override consent obligations or customer expectations.
Use a narrow first message
For a PageFly lead form, the safest first message generally does one clear job:
- Confirm the form was received.
- Deliver the promised guide, code, or next step.
- Explain what happens next.
- Provide a support or reply path.
Avoid treating the confirmation message as a container for an entire marketing campaign. A short, immediately relevant message is easier to understand, easier to support, and less likely to surprise the recipient.
Handle missing names gracefully
Customer name fields may be optional. The Flow JSON above uses Liquid’s default filter so an empty first name becomes “there.” Do not create a subject line that depends on an optional name, and do not assume every submitted record contains a last name or customer note.
Test at least these submissions:
- Email only.
- Email plus first and last name.
- A name containing punctuation or non-ASCII characters.
- An existing email address.
- A malformed email address rejected by the form.
The goal is not only to prove the send works. It is to prove that the message remains understandable when optional fields are absent.
When this breaks
This integration crosses PageFly, Shopify customer creation, Shopify Flow, and Volanea. Most failures occur at the seams. Design for them before the landing page becomes a high-volume campaign asset.
Flow retries can create duplicate sends
Shopify Flow waits up to 30 seconds for an HTTP response from a Send HTTP request action. If no response arrives, it closes the connection and retries later. Shopify documents retry behavior for timeout, 4XX, 5XX, and 429 outcomes, with retry options that can continue for up to 24 hours.
That is why the stable Idempotency-Key is not an optional optimization. Reuse the same key on every retry of the same customer-triggered message. Do not include a timestamp, random UUID, or attempt number in the key.
The request may time out after Volanea accepted it
A timeout does not prove that Volanea failed to accept the email. It only proves Flow did not receive a response in time. Treat the first request as uncertain, not failed, until you inspect Volanea send activity or request logs. Retrying with the same idempotency key is safe; retrying with a fresh key can produce a duplicate delivery.
Keep the request simple. Do not put slow external lookups, long-running content generation, or additional API calls in the critical path before the email send. Flow’s request should be a compact JSON POST that can complete well within the timeout window.
The PageFly tag may be missing
If the Customer Form is copied, replaced, edited by another teammate, or published from an old page revision, the pagefly-lead tag may disappear. In that case, Shopify can still create the customer, but Flow’s condition correctly prevents the email from sending.
This is preferable to sending unrelated messages, but it can look like a silent failure. Your launch checklist should include verifying the tag on a new test customer after every meaningful PageFly form change.
Some submitted fields may be empty
PageFly Customer Form fields are configurable. A field can be removed, made optional, or mapped differently. That means first name, last name, and note data can be absent even when the email field is present.
Do not put unescaped optional data directly into HTML attributes, URLs, or sensitive headers. Keep personalization in text content, provide fallbacks, and use only fields you have tested. If you need a custom data point for routing, make it explicit in the form design and test the corresponding Shopify customer record.
Existing customers do not trigger Customer created
A PageFly Customer Form submission from an email address already present in Shopify may update or associate with an existing customer rather than producing a new Customer created event. Your Flow will not run if no new customer profile is created.
If the business requirement is “send an email every time this form is submitted,” the Customer created trigger is not sufficient. Use middleware that receives the form submission directly, or use another durable event source that represents each submission. Do not try to solve this with a looser Flow condition that sends on every customer update; that can create a large number of accidental messages.
Your Shopify plan may not expose Send HTTP request
The direct Flow action is limited to Shopify Plus, Advanced, and Grow plans. If the action is unavailable, do not paste the Volanea API key into PageFly custom JavaScript as a workaround.
Use Zapier, Make, or a small server-side endpoint instead. The automation should watch for newly created Shopify customers, filter for the PageFly tag, and then call Volanea with the same field mapping and idempotency-key approach. A middleware service is also the right choice when you need more complex validation, verification, enrichment, auditing, or a true “every form submission” trigger.
Test the complete route before launch
A good test verifies data, automation, send acceptance, and customer experience. Testing only the PageFly success message proves very little about the later hops.
Run this sequence with a dedicated test inbox:
- Submit the published PageFly Customer Form with a brand-new email address.
- In Shopify Admin, find the new customer and verify email, name fields, and the
pagefly-leadtag. - In Shopify Flow, inspect the workflow run. Confirm the condition matched and the HTTP action executed.
- In Volanea, inspect the send result and recipient address.
- Open the received email on desktop and mobile.
- Submit the same test again only after deciding what should happen for an existing customer; do not assume a second form submission triggers the same Flow.
- Simulate or inspect a retry scenario and confirm the idempotency key remains unchanged.
A test can be accepted only when all four systems agree. The PageFly page should show success, Shopify should contain the intended customer data, Flow should show a successful request, and Volanea should show the intended email record.
Operational improvements after the first send
Once the basic automation is working, add structure before you increase campaign traffic.
Use a dedicated sender identity
Use a From address that matches the landing-page brand and is verified in Volanea. Keep the address stable so recipients recognize it in future support exchanges. A generic address can work operationally, but a recognizable sender name and verified domain build clearer expectations.
Track the source in metadata
The metadata.source value in the example is not decoration. It lets you distinguish PageFly lead emails from checkout emails, support messages, app notifications, and campaigns when reviewing send logs. Add a campaign identifier when multiple PageFly pages share the same workflow pattern.
For example:
"metadata": {
"source": "pagefly-customer-form",
"campaign": "spring-collection-waitlist",
"shopifyCustomerId": "{{ customer.id }}"
}
Keep copy separate from routing when volume grows
Inline HTML is ideal for a small welcome email because the automation is visible in one place. As message variants multiply, move presentation into a Volanea template and pass only controlled variables. That reduces the chance a workflow edit accidentally breaks markup or replaces a legal footer.
The routing data should still remain explicit: recipient, sender, event source, campaign identifier, and idempotency key. Templates simplify content; they do not replace delivery controls.
Validate address quality at the right point
A form field with email validation can reject obvious formatting mistakes, but it cannot determine whether an inbox is deliverable or disposable. If address quality materially affects your acquisition cost or sender reputation, add verification before adding contacts to downstream marketing audiences. Volanea’s email address verification tool can help check addresses without exposing your API secret in the storefront.
FAQ
Does PageFly have a native Volanea integration?
No. PageFly does not provide a native Volanea app, marketplace installation flow, or documented server-side outbound webhook action. Use PageFly Customer Form data through Shopify and Shopify Flow, or use Zapier, Make, or your own middleware.
What PageFly event starts the email?
The visitor submits a PageFly Customer Form. That form creates a Shopify customer record. Shopify Flow then starts on the Customer created trigger and sends only when the record has the PageFly-specific tag.
Can I put my Volanea API key in PageFly Custom JavaScript?
No. PageFly custom JavaScript is delivered to the visitor’s browser, so any key in it is publicly recoverable. Store the key in Shopify Flow secrets or a server-side secret manager and call Volanea from that protected environment.
Why do I need an Idempotency-Key?
Shopify Flow can retry an HTTP request after a timeout or error. A stable Idempotency-Key tells Volanea that retry attempts represent the same intended email, which prevents the recipient from receiving duplicates.
Why did my PageFly submission not send an email?
First check whether Shopify created a new customer and whether that customer has the exact PageFly tag used in your Flow condition. Also remember that Customer created does not run for an existing customer record, so repeat form submissions may not trigger the workflow.