MT4/MT5 Dormant Client Reactivation Workflow Map
A fill-in workflow map from MT4/MT5 dormant-account export to segmented call list, AI call, CRM outcome sync and re-deposit tracking for brokerages.
- Who it is for
- Brokerage ops, retention and CRM leads who own the MT4/MT5 back office and want dormant accounts called without a manual list build every month.
- Time to complete
- 60 minutes
Most brokerages already have the dormant book sitting in MT4 or MT5: accounts with a last login six months back, a balance that never moved, a group that says live. What's missing is a repeatable path from that data to a phone call and back. This map lays out eight steps in order, from the platform export through the CRM join, suppression, segmentation, the AI call and the outcome write-back, with a blank next to every threshold, field name and owner. Fill it in once and the same run works every month, on MT4, MT5 or both.
Step 1: Define dormant in platform terms
Dormant has to be a query, not a feeling. Pick the signals your platform actually stores, set a threshold for each, and write down which one wins when they disagree.
Decide which signal defines dormant when they disagree: last closed trade or last login
A trader who logs in weekly to watch charts but hasn't traded in a year is dormant by one rule and active by the other. Most retention teams use last closed trade for the call list and last login only for segmentation.
Set separate thresholds for funded and zero-balance accounts
A funded account with no trades for 60 days is a different call from an empty one that went quiet 400 days ago. Two thresholds, two lists.
Funded: ____ days. Zero balance: ____ days
Exclude archived accounts unless your CRM still holds a live contact for them
MT4 and MT5 both move inactive accounts to an archive after a configurable period. Archived logins often have no reachable phone, so pull them only where the CRM record is complete.
Write the exclusion list by group name: demo, IB test, staff, partner and any other group that doesn't belong in a retention call
Excluded groups: ____
Record the dormancy definition and the date you set it, so the reactivation rate you measure later means something
Defined by: ____ on ____
| Signal | Where MT4 stores it | Where MT5 stores it | Your threshold |
|---|---|---|---|
| Last login | User record last-login date (Manager API or admin report export) | Account last-access time (Manager or Web API, admin report) | No login in ____ days |
| Last closed trade | Closed orders history, latest close time per login | Deals history, latest close time per login | No closed trade in ____ days |
| Last deposit | Balance operations of deposit type, latest per login | Balance deals of deposit type, latest per login | No deposit in ____ days |
| Balance and equity | User balance and equity fields | Account balance and equity fields | Segment at ____ and ____ (base currency) |
| Open positions | Count of open orders per login | Count of open positions per login | Exclude accounts with an open position: yes / no |
| Account status | Group name, enabled flag, archived status | Group, account rights, archived status | Include groups: ____ Exclude: ____ |
Step 2: Export the dormant account list
The export is the one step that touches the trading server. Keep it read-only, scheduled, and limited to the fields the workflow needs.
Choose the export route: Manager API pull, scheduled admin report export, or your CRM's existing platform sync
If the CRM already mirrors the platform through a bridge or plugin, use that copy and check its lag. A sync that runs nightly is fine for a monthly campaign. A copy that last refreshed in spring is not.
Route: ____ Refresh: ____
Use a read-only manager login with report rights only, and log every export run
A retention export never needs trading, balance or group-edit rights. Ask the platform admin for a dedicated login and review its rights every quarter.
Pull one row per login, then collapse to one row per client in the next step
Traders open several accounts. Calling the same person three times because they have three logins is the fastest way to a complaint.
Export closed-trade history as a per-login latest close time, not the full order table
The full history for a mid-size broker runs to millions of rows. The workflow only needs the latest close time and, optionally, the trade count in the last ____ days.
Time the export for the same day each month, after the platform's end-of-day rollover
Export day: ____ Time (server): ____
Store the export with a run ID and row count, so a list that shrinks or doubles is caught before it's dialed
Expected rows: ____ to ____
| Field | MT4 source | MT5 source | Needed for |
|---|---|---|---|
| Login (account number) | User record | Account record | Join key to the CRM |
| Name | User record name | Account name fields | Match check against the CRM |
| Group | User group | Account group | Filtering, currency, account type |
| Country | User country field | Account country field | Jurisdiction, calling hours, language guess |
| Last login / last access | User last-login date | Account last-access time | Dormancy signal |
| Last closed trade | Orders history, latest close time | Deals history, latest close time | Dormancy signal, segmentation |
| Balance, equity, credit | User balance, equity, credit | Account balance, equity, credit | Segmentation, offer eligibility |
| Registration date | User registration date | Account registration date | Tenure segment |
| Phone and email | User record, often empty | Account record, often empty | Fallback only. The CRM is the source of truth |
Step 3: Join to the CRM and enrich
The platform knows the account. The CRM knows the person. Every step after this one depends on the join being right.
Join on login to client ID, then keep the most recently active login per client as the account the agent talks about
The agent should reference the account the trader remembers, not the one opened by accident in 2022.
Set the join failure rule: a platform login with no CRM match goes to a review list, never to the dialer
Compare the platform name with the CRM name and flag mismatches for a human check
A mismatch usually means a merged client, a corporate account or an IB sub-account. None of those should get a standard reactivation call.
Copy the trader's own numbers onto the record: last deposit amount, current balance, time since last trade
The call opens with facts the trader recognises. Those facts come from the platform export and need to be on the CRM record before the list goes to the campaign.
Record the join yield every run
Platform rows ____, matched ____, parked ____
| CRM field | Why the call needs it | If it's missing |
|---|---|---|
| Client ID (one per person) | Collapses several logins to one contact | Row is unusable: park it |
| Phone in E.164 format | The number that gets dialed | Row is unusable: park it |
| Preferred language | The agent speaks it from the first sentence | Fall back to the country default, flag for review |
| Country of residence | Consent rules, calling hours, disclosure wording | Take the platform country, flag if the two disagree |
| KYC / verification status | Blocks any deposit ask on an unverified account | Treat as unverified |
| Marketing consent and DNC flag | Decides whether the call can happen at all | Treat as no consent |
| Assigned account manager or IB | Routing for handoffs and IB-owned clients | Route to the retention desk |
| Last contact date and channel | Avoids calling someone emailed yesterday | Assume none |
| Open ticket or complaint flag | Suppresses the call | Check tickets by client ID before assuming none |
Step 4: Suppression and eligibility
Run these checks after the join and before segmentation, in this order. Every removed row gets a reason code so you can report why the list shrank.
Remove clients with no marketing consent on file for the calling jurisdiction, and anyone with an internal do-not-call flag
Under GDPR and the UK regime a dormant client is still a data subject with a right to object. In the US, TCPA and the TSR govern automated and telemarketing calls, and national and state DNC registries apply. Confirm with your compliance officer or counsel which basis you rely on for each country.
Reason code: NO_CONSENT
Screen every number against the relevant national and state DNC registries where you call
Reason code: DNC_REGISTRY
Remove accounts with an open complaint, chargeback, dispute or fraud flag, and anyone under a regulatory hold
Reason code: OPEN_ISSUE
Remove clients contacted by any channel in the last ____ days, unless this campaign is the follow-up to that contact
Reason code: RECENT_CONTACT
Remove IB-owned clients unless the IB has agreed to the campaign in writing
IB agreements often restrict direct contact with referred clients. Check the agreement as well as the CRM flag.
Reason code: IB_EXCLUDED
Remove clients in any country where you don't hold an approved disclosure script and calling hours
Reason code: NO_SCRIPT
Cap the run at the volume your handoff team can absorb, and hold the remainder for next week
Max per run: ____
Log the count and reason code for every removal, and keep the parked rows for the next run
Signed off by: ____
Step 5: Segment into call lists
One list, one call goal. The segments below are a starting set. Rename them to your own, but keep each one tied to a single measurable goal.
Assign every joined row to exactly one segment, and put the priority order in writing so overlaps resolve the same way each run
Order: ____
Add language and country to each list so the campaign runs the right script and calling hours per list
Topcalls agents speak 32 languages, but a list with mixed languages still needs the language on each row.
Set a per-segment attempt cap and cadence, then hand the cadence to the call cadence template
Attempts: ____ over ____ days
Hold back a control group per segment that gets no call
Without a control you can't tell reactivation from seasonal noise. Pick a share you can defend and keep it the same across runs.
Control: ____ %
Name the offer, if any, per segment, and get compliance sign-off on it before the list goes live
Bonuses and deposit incentives sit under FCA financial promotion rules in the UK and MiFID II inducement rules in the EU. Any offer is a review item, not a script default. Confirm with your compliance officer.
| Segment | Rule (from the export) | Call goal | Priority |
|---|---|---|---|
| Funded, recently quiet | Balance above ____, no closed trade in 60 to 180 days | Find out what stopped them and get one trade or a platform session booked | 1 |
| Funded, long dormant | Balance above ____, no closed trade in more than 180 days | Confirm they still want the account, then the same goal as above | 2 |
| Withdrawn to zero | Balance zero, last balance operation was a withdrawal | Learn why they left; offer a re-deposit path only if compliance has approved it | 3 |
| Never funded | Registered more than ____ days ago, no deposit ever, KYC complete | Remove the deposit blocker: method, minimum, platform confusion | 4 |
| Never verified | No deposit, KYC incomplete | KYC reminder call, not a reactivation pitch | Route to the KYC flow |
| Demo only | Live account exists but every trade was on a demo group | Hand to the demo-to-funded playbook | Route to the demo flow |
Step 6: The AI call
The agent gets the CRM record, the segment, the call goal and a fixed set of outcomes. Nothing else changes between lists except the script.
Open with the account facts: the platform, roughly how long since the last trade, and that the balance is still there if it is
Naming MT4 or MT5 and a real date signals the call is from the broker, not a scam, which is what a dormant trader assumes first.
Disclose that the call is automated or AI-assisted in the first sentence where the jurisdiction requires it, and announce recording
See the AI call disclosure checklist for wording by region. Confirm with your compliance officer.
Give the agent one question per segment and one next step, not a menu
The funded-quiet segment asks what stopped them trading. The withdrawn segment asks what would bring them back. Each answer maps to one outcome code.
Forbid three things in every script: quoting expected returns, pressuring a deposit, and discussing another client's results
These are the phrases that turn a service call into a financial promotion. Have compliance read the script with that lens.
Transfer live when the trader asks for a person, mentions a loss dispute, or asks about regulation
Transfer number: ____ Hours: ____
Set the maximum call length per segment before launch
At $0.35 per minute all-inclusive, a six-minute call costs $2.10. Your own reactivated-account value decides how many minutes a list is worth.
Max minutes: ____
| Outcome code | Meaning | CRM field | Next action |
|---|---|---|---|
| REACTIVATE_INTENT | Trader plans to log in or trade again | reactivation_stage = intent | Send login help by SMS; check the platform for a login within 7 days |
| SESSION_BOOKED | Platform walkthrough or account review booked | next_call_at, owner | Human or agent session on the date chosen |
| DEPOSIT_INTENT | Trader intends to fund, no blocker named | reactivation_stage = deposit_intent | Cashier link by SMS; the deposit follow-up flow takes over |
| BLOCKER_NAMED | Named a reason: fees, platform, losses, method, trust | dormancy_reason | Route by reason; product or payments review weekly |
| NOT_NOW | Wants time, agreed a follow-up date | next_call_at | One call on that date, then email only |
| CLOSE_REQUEST | Wants the account closed or funds withdrawn | close_request_at | Support ticket, no further calls |
| HANDOFF | Asked for a person, raised a complaint or a regulator | escalation_owner | Live transfer or callback within ____ hours |
| NO_ANSWER | No connect after all attempts | attempts_count | SMS or email fallback, then park for the next run |
| DO_NOT_CALL | Asked not to be called | dnc_flag = true | Suppress everywhere the same day |
Step 7: Sync outcomes back
The call is half the loop. Each outcome has a destination, a field and a timing. Decide them here so the CRM, the platform team and the human desk all see the same thing.
Write outcomes through your CRM's native connector or a webhook, not a spreadsheet upload
Topcalls pushes outcomes, transcripts and recordings to the CRM through Integrations, which connects to 5,000+ tools. A webhook per outcome works where there's no native connector.
Map every outcome code to a CRM picklist value before the first call, and reject unmapped codes at the integration layer
Suppress DO_NOT_CALL in both the CRM and the campaign list, because the campaign may dial again before the CRM sync runs
Run the platform export nightly during the campaign window, so logins, deposits and trades after each call are attributed within a day
Attribution needs the call date on the CRM record and the platform event date on the same client. The join from step 3 does the rest.
Attribution window: ____ days
Give the retention desk a view filtered to HANDOFF and BLOCKER_NAMED, sorted by balance, refreshed on every sync
Send a test batch of five calls through the full loop and check every field landed before scaling the list
Test batch checked by: ____
| Event | Destination | What is written | When |
|---|---|---|---|
| Call completed | CRM contact record | Outcome code, summary, recording and transcript link, agent notes | Within a minute of hang-up |
| REACTIVATE_INTENT or DEPOSIT_INTENT | CRM deal or opportunity | Stage, expected date, source = reactivation_call | Within a minute of hang-up |
| SESSION_BOOKED | Calendar and account manager task | Date, time, trader timezone, login | Immediately, with a reminder |
| BLOCKER_NAMED | CRM reason field plus the weekly report | Reason category and free text | Immediately; reported every Monday |
| HANDOFF | Retention desk queue | Transcript, reason, callback window | Immediately |
| DO_NOT_CALL or CLOSE_REQUEST | CRM suppression flag and campaign suppression list | Flag and timestamp | Same day, before the next dial |
| Platform login after the call | CRM reactivation stage | First login date, days since call | Nightly, from the platform export |
| Deposit or trade after the call | CRM reactivation stage and campaign report | Amount, date, days since call | Nightly, from the platform export |
Step 8: Re-engagement tracking
Fill this in weekly for each run. The bottom rows decide whether the workflow keeps running.
Count a reactivation only on a platform event: a login, a deposit or a closed trade, never on an outcome code
Intent is what the trader said. Reactivation is what the platform recorded. Report both, and pay attention to the second.
Subtract the control group's rate from the called group's rate before you call the difference a lift
Take the BLOCKER_NAMED reasons to the weekly product and payments meeting
If the same reason tops the list three runs in a row, the fix is in the platform or the cashier, not in the script.
Recycle NOT_NOW and NO_ANSWER rows into the next run with their attempt history, and drop anyone who has hit the cap
Re-check the dormancy definition after the first three runs
If most reactivations come from the 60 to 120 day band, tighten the threshold so the list reaches traders earlier.
Next review date: ____
| Metric | Source | Window | This run |
|---|---|---|---|
| Dormant accounts exported | Step 2 export row count | Run | ____ |
| Rows matched and eligible | Step 3 join, step 4 suppression | Run | ____ matched, ____ eligible |
| Calls placed and connected | Campaign dashboard | Run | ____ placed, ____ connected |
| Outcomes by code | CRM outcome field | Run | Intent ____ Booked ____ Blocker ____ Not now ____ |
| Logged in after the call | Platform export, last access after the call date | ____ days | ____ |
| Deposited after the call | Platform balance operations after the call date | ____ days | ____ accounts, ____ total |
| Traded after the call | Platform closed trades after the call date | ____ days | ____ |
| Same three for the control group | Held-back rows, same windows | ____ days | Login ____ Deposit ____ Trade ____ |
| Voice cost | Call minutes x $0.35 | Run | ____ |
| Cost per reactivated account | Voice cost divided by accounts that traded or deposited | Run | ____ |
How to use this
- 1
Fill step 1 with your platform admin and step 3 with whoever owns the CRM. Both need to agree before the first export.
- 2
Run steps 2 to 4 once by hand and record the row counts at each stage. That's your baseline for spotting a broken export later.
- 3
Paste the outcome codes from step 6 into the CRM as a picklist before any call runs.
- 4
Walk step 4 and the script rules in step 6 with your compliance officer and get a name on each sign-off line.
- 5
Send a five-call test batch through step 7 and check every field, then scale to the first segment.
- 6
Fill the step 8 table each week and review the dormancy threshold after three runs.
Next step
We walk through your MT4 or MT5 export, size the dormant book by segment, map the CRM outcome flow and scope a pilot on one call list.
Book a 30-minute callRead next
Related resources
Brokerage CRM Integration Planning Checklist
Plan the CRM connection for AI calling at a brokerage: owners, field mapping, dispositions, triggers, sync direction, webhooks, testing and data access.
Reactivation List Data Checklist
Audit and clean a dormant trader list before calling: required fields, E.164 numbers, consent flags, suppression, dedupe and priority signals.
Dormant Trader Segmentation Plan Template
Fill-in template to split a dormant trader book by dormancy age, deposit history, activity signals and region, score each segment and pick its message.