Look up any GetResponse contact beside their HubSpot deals
Type an email and see every list someone is on, what they opened and clicked, and their open deals, without anyone opening GetResponse.
Build me an internal lookup desk that my support and account teams open whenever someone asks whether a customer is even on our email list and whether they got the last send. Today that question gets forwarded to marketing, because nobody else has a GetResponse login and marketing has to click through one list at a time to answer it. The app runs on GetResponse for subscription and engagement data and HubSpot for the commercial picture. It is a single person profile surface rather than a report: someone types an email address and gets one answer.
Everything starts from one search box that takes an email address. Note that there is no single get contact by email operation in GetResponse, so resolve the address this way: read List Campaigns once to get every list on the account, then use List Contacts, which searches across one or more campaigns, to find the address. That returns one row per list the person sits on, each with its own contact id, and the same person commonly sits on more than one list. Merge those rows into a single profile instead of showing one campaign at a time. Contact ids are short alphanumeric tokens such as p86zQ and are never numeric, so treat them as strings everywhere. Cache the campaign list since it changes rarely, and let me pick in a settings area which lists the desk searches, so a big account with dozens of lists stays fast.
The GetResponse side of the profile shows first which lists they are on, and for each one when they subscribed and how they subscribed, which List Contacts returns as the origin of the record, for example a signup form, an import or the API. Underneath that show their tags and their custom field values. Read List Custom Fields once to get the human readable names for the fields, so the profile shows a labelled value rather than a raw field id. Custom field values always come back as arrays of strings even when the field only ever holds one value, so render a single value plainly instead of exposing a one item array.
Then the engagement timeline, which is the reason this app exists. Take the contact id from each list the person appears on, call Get Contact Activities for each one, and merge the results into a single timeline sorted newest first. Show opens, clicks and subscription events together, each with the message name, the date and which list it came from, and make clicks visually distinct from opens because they are the stronger signal. If the person is on three lists this is still one timeline, not three separate histories. Put a short note near the open history explaining that open tracking is unreliable when recipients use mail privacy features that pre-load images, so a rep reading the screen does not over-trust an open count. Page through activities rather than assuming a single page covers it, and default the view to the last ninety days with a control to load more.
The right side of the profile is HubSpot, loaded from the same email address. Use Search Contacts filtered on email to find the record and show the contact owner, lifecycle stage and company. Then use Search Deals to load their open deals, showing deal name, stage, amount, close date and owner, sorted by amount. This pairing is the whole point of the screen: a rep should be able to see at a glance that someone has clicked the last three sends while sitting in a late stage deal, or that a big open deal has gone completely quiet on email.
I want to act from the profile without opening GetResponse. Give me three actions. First, edit their tags or custom field values with Update Contact. Second, add them to a different list with Create Contact, picking the target list from the campaigns already loaded. Third, remove them with Delete Contact, behind an explicit confirmation dialog that names the person and the list, since it is destructive and cannot be undone. Bake in how this API actually behaves: updates are a POST to the contact id and there is no PUT or PATCH, campaignId is required on every contact write so always carry the campaign id of the list row being acted on, and custom field values must be sent as arrays of strings. Create Contact returns 202 Accepted, meaning the contact is queued rather than created immediately, so do not re-read straight away and report a failure. Show a queued state and confirm once the contact resolves on a later read.
Add a write the follow-up button to the profile that starts a background agent. The agent reads what this person actually opened and clicked from their activity history, plus their HubSpot deal stage, deal amount and owner, and then drafts a short personalised follow-up email that references the specific things they engaged with rather than generic copy. It posts the draft back into the app on the same profile, where the rep can read it, copy it and send it themselves from their own mail client. The agent never sends anything and never writes to either system. Show a visible running state while it works, keep the last few drafts for that person so a rep can compare, and stamp each draft with the date it was written.
Keep a list of recent lookups for each user, so reopening a profile someone checked earlier is one click instead of retyping the address. Store it per user rather than per workspace and show it on the empty state before anyone searches. Handle the not found case precisely, because a vague no results message is exactly what sends people back to marketing: say whether the address is missing from GetResponse only, missing from HubSpot only, or missing from both, and word each case in plain language, for example that this address is not on any of your GetResponse lists but does exist in HubSpot with an open deal. When someone is missing from GetResponse only, offer the add to a list action directly from that empty state.
A few practical constraints. GetResponse list endpoints are paginated with page and perPage parameters, so page through rather than assuming the first page is everything. The account is rate limited, so resolve each profile with a sensible number of calls: campaigns cached, one contact search, then activities only for the lists the person actually matched, rather than fanning out across every campaign. Search only when I submit the box, not on every character typed. Keep the whole desk read only until I press an action button, and never write to either system in the background.
What does this prompt do?
- Type an email address and get one merged profile, so a customer who sits on three different lists shows up once instead of as three separate campaign views
- See exactly what they opened and clicked over time, when and how they subscribed, and every tag and custom field on their record
- Read their CRM record and open deals on the same screen, so marketing engagement and pipeline sit side by side instead of in two tools
- Act without switching tools: edit tags and fields, add someone to a different list, or remove them behind a confirmation step
- Press write the follow-up and an assistant reads what this person actually engaged with plus their deal stage and owner, then drafts a personalised email back into the app for a rep to review and copy
What do I need to use this?
- A GetResponse account with your contact lists already set up
- A HubSpot account with contacts and deals, and permission to view deal records
- Nothing for the people using it day to day, which is the point: support and account reps never need a GetResponse login
How can I customize it?
- Choose which lists the desk searches, so an account with dozens of lists stays fast to look up
- Change how far back the engagement timeline reaches by default, and whether opens show alongside clicks or clicks only
- Adjust the tone and length of the drafted follow-up, and which deal details it is allowed to reference
FAQs
Does this change anything in GetResponse or HubSpot on its own?
What happens when the email address is not found?
Will it work if the same person is on more than one list?
Can my support team use this without a GetResponse login?
Why do the open numbers look higher than I expect?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
Pick a date, a starting point and a radius, then build a sequenced day of customer visits that lands straight on your calendar.
One screen where reps filter for companies that fit, see who is actually reachable at each account, and save only the addresses that verify.
See every competitor battlecard next to the number of open deals that name that competitor, so the cards carrying real pipeline get refreshed first.
Score every target account against the buying committee you actually need, see the exact holes, and have an assistant fill them in your CRM.
See open and pending conversations from all your Help Scout inboxes in one queue, sorted so the customers who have waited longest on you come first.
Stop asking marketing whether a customer got the email.
Give your support and account teams one screen that answers it in seconds, with the pipeline sitting right beside it.