See which Constant Contact emails actually made money
Rank every email you sent in the last 90 days by the Shopify revenue it brought in instead of by open rate, and see which offer actually pulled.
I want an app that finally tells me which of my Constant Contact emails actually made money. My store runs on Shopify and my email runs on Constant Contact, and neither one can tell me the revenue behind a given send, so I want a campaign revenue board that puts the two side by side.
The main surface is a board with one row per email campaign sent in the last 90 days. Get the campaigns with the Constant Contact List Email Campaigns operation, keep the ones with a sent or done status inside the period, and pull sends, opens, clicks, bounces and unsubscribes for each from Get Email Campaign Summaries. Next to those engagement columns, show the attributed Shopify side: how many people who clicked that email went on to place an order, how many orders that was, and the total attributed revenue. Every column should be sortable, and revenue should be the default sort so I can rank my sends by money instead of by open rate. Also show revenue per thousand sends and revenue per click so a small, well targeted send is not buried under a big one.
Attribution works by matching email addresses, not by tracking pixels or tagged links, and the app should be honest about that everywhere. For each campaign, pull the click report with Get Campaign Activity Tracking Clicks, which returns the contact email address and the URL clicked. Fetch Shopify orders for the period with List Orders, using its created-at date filters, and join on a normalized email address: lowercase, trimmed, matched against the order customer email and the order contact email. An order is attributed to a campaign when the buyer clicked that campaign and the order was placed after the click and within the attribution window. Put a control at the top of the page for the attribution window, defaulting to 7 days, and let me also change the reporting period from the 90 day default. The chosen window has to appear next to every attributed number on the screen, in the board header, on each row, and in the detail view, so nobody can screenshot a figure without its window. Add a short, permanent explainer near the top saying that attributed revenue is match based rather than pixel based, that it credits orders placed under the same email address the campaign was sent to, and that orders placed under a different address will not be counted.
Give me a toggle to exclude orders that Shopify reports as refunded or cancelled. Use the financial status and cancellation fields on the order, treat refunded and partially refunded and cancelled orders as excludable, and when the toggle is on subtract them from the attributed totals rather than silently dropping the row. The board should state which setting produced the numbers currently shown. If one buyer is credited to more than one campaign inside the window, credit the most recent click before the order and note in the row that the order was contested, so I understand overlapping sends are not double counting revenue.
Clicking a campaign row opens a detail view for that send. Show the subject line, send date, and the same headline engagement numbers, then split the audience into three buckets: clicked and bought, clicked and did not buy, and opened but never clicked. Build the first two from Get Campaign Activity Tracking Clicks joined against the Shopify orders, and the third from Get Campaign Activity Tracking Opens minus everyone who appears in the click report. Each bucket lists the contacts with their email address, and the clicked and bought bucket shows order value, order date, and how many days after the click the order landed. Alongside the buckets, show a per-link breakdown from Get Campaign Activity Links with the click count on every link in the email, sorted by clicks, so I can see which offer actually pulled. Where possible, also show attributed revenue per link by looking at which URL each buyer clicked.
The board needs a Plan the next send button that kicks off a background agent. The agent reads the current period as it is on screen, including the attribution window and the refund setting, identifies the top and bottom performing campaigns by attributed revenue, and works out what separated them: subject line, send day and time, offer, and which links pulled. It then creates a follow-up list in Constant Contact with Create Contact List, named for the source campaign and the date, and adds the clicked but did not buy contacts from the best performing campaign to it with Add List Memberships (Bulk), using the contact ids returned by the click report and falling back to List Contacts filtered by email address for anyone missing an id. Next it drafts a follow up campaign with Create Email Campaign, targeted at that new list, with body copy that leans on whatever actually converted in the winning send. The draft must be left unsent.
The agent also writes its reasoning back into the app so I can read it next to the numbers before I touch send. Persist each planning run in the app with a timestamp, the period and attribution window it used, the refund setting, the campaigns it judged best and worst with their revenue figures, three to five subject line options with a sentence on why each one follows from what converted, the name and size of the list it built, and a link to the draft campaign in Constant Contact. Show the most recent plan in a panel beside the board and keep the earlier ones in a history list so I can look back at what it predicted and whether it was right. Make it obvious in the panel that nothing has been sent and that the list and draft are waiting for me in Constant Contact.
Two practical notes for the build. Constant Contact allows only 4 requests per second and 10,000 per day, so the handlers must page through results properly, cache campaign summaries and click and open reports rather than refetching them on every render, and refresh on an explicit reload control instead of continuously. Shopify order pages should be cached the same way for the selected period. Second, the board should degrade gracefully: if a campaign has no click report yet, show it with its engagement numbers and an empty revenue cell marked as not yet reportable rather than showing zero revenue, because a blank and a genuine zero mean very different things to me.
What does this prompt do?
- One row per email sent in the last 90 days, showing sends, opens, clicks, bounces and unsubscribes from Constant Contact next to the Shopify orders and revenue from the people who clicked it, so you can finally sort your sends by money
- You set the attribution window at the top of the page, seven days by default, and every revenue figure on the screen carries that window so nobody reads the numbers the wrong way
- Open any campaign to see who clicked and bought, who clicked and did not buy, and who opened but never clicked, plus per-link click counts that show which offer pulled
- A Plan the next send button hands the period to a background assistant that builds a follow-up list of the clickers who did not buy, drafts the next campaign in Constant Contact, and writes its reasoning back into the board for you to read before you touch send
What do I need to use this?
- A Constant Contact account with the campaigns you want to measure
- A Shopify store where shoppers tend to check out with the same email address they subscribed with
- No tracking pixel, no tagged links and nothing to install in your store
How can I customize it?
- Change the attribution window at the top of the board, and the reporting period if ninety days is not how you think about your sends
- Choose whether orders that Shopify reports as refunded or cancelled count toward attributed revenue
- Tune what the planning assistant produces: how many subject line options, what it names the follow-up list, and how direct its read on the weakest sends should be
FAQs
How does this know which orders came from an email?
Do I need to add tracking links or a pixel to my emails first?
What attribution window should I pick?
Will refunds and cancelled orders inflate the revenue figures?
Does the Plan the next send button email anybody?
Related templates
Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.
See which products still have no video, animate their hero photos into short cinematic clips, and compare motion styles side by side before you pick a winner.
A morning queue that ranks pending and unpaid orders by value, shows each buyer's return history, and queues WhatsApp confirmations before anything ships.
See every product with thin copy, missing alt text or no SEO title, review a rewrite built from its own photo, and publish only what you approve.
Rank your catalog by view to cart and cart to purchase rate, so the products getting real traffic and losing the sale sit at the top of the screen.
Type a customer email or phone and see their whole support history, order tracking, and payment record on one screen instead of three tabs.
Stop ranking your emails by open rate.
Put real Shopify revenue next to every Constant Contact send, and get the next one drafted for you.