Mailjet email delivery lookup console for support teams

By General Input

Type a customer's email address and see every message you sent them, what happened to each one, and why it did not land.

Integrations

  • Mailjet
  • HubSpot
  • Slack

Type

App

Categories

  • Customer Support
  • Operations

Build me an email delivery lookup console that my support team opens whenever a customer says "I never got the email." It is an internal tool for support agents, shared across the whole team, and the whole point is to answer one question fast: what happened to the messages we sent this person, and why did they not land.

The main screen is a single search box where the agent types a recipient email address, plus a date-range filter that defaults to the last 30 days. Results are a list of every Mailjet message sent to that person in reverse chronological order. Load the rows with the Mailjet "List and retrieve messages" operation filtered by contact, and enrich them with "List and retrieve message information" so each row can show size and spam details. Mailjet list endpoints wrap results in a { Count, Data, Total } envelope, accept Limit up to 1000 plus Offset for paging, take Unix timestamps or RFC3339 for datetime filters, and accept a Sort property with DESC appended, so sort newest first and page with Offset rather than pulling everything at once.

Keep the search fast and forgiving. If the agent types a complete email address, filter the message list directly by that contact, which is the fast path. If they type a fragment such as a first name, a last name, or a company domain, scan the messages in the selected date window and match recipient addresses that contain the fragment, case-insensitively and ignoring stray whitespace. When a fragment matches more than one address, show a short candidate picker listing the matching addresses with how many messages each has, and let the agent click through to the one they want. Never make them retype the address to get a result.

Each result row gets a status chip: delivered, opened, clicked, bounced, blocked, or spam, plus queued or deferred when that is the state. Use semantic colors so the list is scannable at a glance, with delivered, opened, and clicked reading as healthy, bounced, blocked, and spam reading as problems, and queued or deferred reading as neutral and in progress. Show the subject, the send time, and the status chip on every row.

Clicking a row opens a detail pane for that message. It shows three things side by side. First, the full event timeline for the message from the Mailjet "Get message history" operation, rendered as an ordered trail of events with timestamps, including the bounce or block reason when there is one, plus the size and spam information for that message. Second, the person's CRM context from HubSpot using "Get Contact" with the email address as the lookup key via the idProperty parameter, showing lifecycle stage, contact owner, and associated company. Third, the recipient's current Mailjet subscription state from "Get a contact's list subscriptions", showing which lists they are on and whether they are unsubscribed or excluded. Put these together so an agent can tell at a glance whether the address was suppressed on our side or simply never opened.

From the detail pane the agent can take two actions. Resend the message using the Mailjet "Send an email (Send API v3.1)" operation, behind a confirmation step so nobody double-sends by accident, and note in the app that a resend happened and who did it. Escalate to the deliverability channel using the Slack "Send a Message" operation, with the message ID, the recipient address, the current status, and a condensed event trail pre-filled in the message body so the agent only has to add a sentence of context. Format the Slack message with mrkdwn, meaning single asterisks for bold and angle-bracket links, not standard Markdown.

Add a "Diagnose this delivery" button in the detail pane that kicks off a background agent for that message. The agent reads the event history from "Get message history", the bounce or block reason attached to those events, and the recipient's list subscriptions from "Get a contact's list subscriptions", then writes a short plain-English diagnosis and a recommended fix. Examples of the tone I want: "This address hard bounced twice, the mailbox does not exist, correct the address on the account and it will keep failing until you do" or "This was delivered and sat unopened for nine days, nothing is wrong with delivery, the customer is likely filtering or ignoring it." Save the diagnosis in the app against the message ID and the recipient address, with a timestamp, and render it at the top of the detail pane. Crucially, the next person who searches that address should see the existing diagnosis without rerunning anything, so store it as shared team data rather than per-user state. Show a clear running state on the button while the agent works, and surface a small indicator on result rows that already have a diagnosis.

Persist diagnoses, resend records, and escalation records inside the app so the console builds up an institutional memory of problem addresses that outlasts what Mailjet's own reporting screens show. Handle the empty case gracefully: if there are no messages for an address in the selected window, say so plainly and suggest widening the date range, rather than showing a blank table.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredTurn Mailjet email clicks into ranked HubSpot follow-upsiMessage campaign console with pre-flight checks and delivery boardChat quality review board for LiveChat support leadsA searchable RFP answer library your bid team drafts fromSee which target accounts just started advertising on LinkedInAccount health board that puts product usage next to your CRMLook up a customer's full chat history mid conversationLusha prospecting workbench with credit-safe reveals