[Kamel Nabil] Alpaca Challenge
Documenting my thought process; How I think and reach conclusions.
→open the next section←go backEsccollapse allor click any toggle
I chose one of the recent achievements that is related to the wealth-tech industry.
Taking IPO subscriptions at Awaed from a stuck, never launched product to a live, end to end experience in —.
Context
- Awaed is a Saudi WealthTech platform offering retail investing across Saudi/US markets.
- IPOs are one of the biggest moments for Saudi retail investors, and a natural way to bring new investors in.
- This was my first major challenge in WealthTech, in a market and a regulatory setup I had never worked in before.
Problem
- The IPO product idea existed, but it had never been launched.
- Running an IPO touches Tadawul, compliance, the CMA's rules, trading operations, the brokerage infrastructure, engineering, product design, and finally the user.
- Each team held one piece of the story. No one held it end to end.
- Tadawul's subscription file specs alone had dozens of fields, rejection codes, and several reconciliation reports.
- There was no senior product ownership to bridge the gaps, identify the problem, define it into phases, and turn it into something shippable.
I owned it end to end, from understanding the problem to getting it live.
- 1Go to the sourceI flew to Riyadh and sat with each team, one by one.
- 2Walk the process from every angleCompliance, business, trading operations, Tadawul, engineering and design.
- 3Map one end-to-end journeyUsers and operations on the same page, from prospectus to listing.
- 4Define a shippable scopeTogether with engineering.
- 5Launch and stabilizeStay with the teams until every issue was resolved.
A clean version of my working whiteboard, connecting every team in one flow.
I recall 5 decision moments where I chose one path over another, and had principles behind each.
- What I did
- Went to Riyadh and sat with each team before writing a single requirement.
- The alternative
- Collect requirements remotely and stitch documents together.
- Why I didn't
- Each team only knew its own piece. The gaps sat between the teams, and they only show up when you walk the full process.
Go to the source. The real problem lives where the work happens.
- What I did
- Instead of waiting for a fully automated Tadawul integration, we launched with a file exchange every 2 hours, run by trading operations, who already had Tadawul access.
- The trade-off
- Some manual work for operations, in exchange for going live in weeks, not months.
- What I refused to cut
- Anything compliance or Tadawul required.
Scope is the lever. Compliance and correctness are not.
- What I did
- Mapped the operations journey with the same care as the user journey: who creates the IPO, who exports and uploads files, who pushes allocations, and what happens when Tadawul rejects a subscription.
- Why
- A beautiful app is worthless if the back office can't run the process reliably every 2 hours.
Operations is a user too. If the back office breaks, the experience breaks.
- Simple statuses
- Tadawul returns many result codes and reports. Users see a few clear statuses, each with a notification:
- Money held, not taken
- The amount is held at subscription. After allocation, we deduct only what was allocated and release the rest automatically.
Users should always know where their money is, without needing to understand how an exchange works.
Once the Saudi flow worked end to end, I took the same model to the US market. The journey was familiar; the infrastructure was not.
I split the problem in two, so speed and scale didn't have to compete.
Approach 1 · Manual Ops Flow (MVP)
Go live fast and learn
Reuse the Saudi product with small changes; operations handle the provider steps manually.
Engineering scope: market setting per IPO, US tab, price ranges.
Live in —
Approach 2 · Digital Integration
Scale without manual work
Integrate with an IPO provider's API end to end, run from an admin portal.
Engineering scope: IPO fetching, review and publishing, order aggregation, allocation engine, audit.
Phased roadmap, each phase releasable on its own
Ship manually to learn, then digitize what's proven. Speed and scale don't have to compete.
I turned Tadawul's file specification into a field-by-field mapping for engineers, showing how each calculated field is computed.
The subscription and allocation statuses, and exactly what each one triggers: hold, deduct, release, notify.
Worked through blockers with the engineers day by day, making scope calls on the spot so we never stopped moving.
So the file loop could be tested end to end before going live.
Until every issue that came up was resolved.
I broke down what is required in the task into kind of step by step points,
so I can clearly show how I reached any conclusion.
The steps I followed, so every conclusion can be traced back to the data.
crypto_wallet_revenue appears twice with identical values.I decomposed the revenue from 3 angles:
All accounts, — months (May 23 – Apr 25).
| Stream | Share of 24-month revenue | Live since |
|---|
Total: — over 24 months.
All accounts, 24 months, streams grouped by how Alpaca earns them.
All accounts, month by month (May 23 – Apr 25). Did we grow because we got more customers, or because each customer became worth more? And is the mix still the same?
I segmented the accounts from 4 angles:
All accounts, 24 months (May 23 – Apr 25).
| Segment | Accounts | Share of accounts | Revenue ($M) | Share of revenue |
|---|
Individuals only, last 6 months (Nov 24 – Apr 25), after Argentina took off. — of the — Argentine accounts make — of it.
| Segment | Accounts | Share of accounts | Revenue ($M) | Share of revenue |
|---|
- The USA is the biggest market: — of accounts and — of individual revenue.
- But the concentration is in Argentina: — accounts (—) produce — of individual revenue, and just — of them make — of it.
All accounts, 24 months, ranked by total revenue.
| Segment | Accounts | Share of accounts | Revenue ($M) | Share of revenue |
|---|
(Top 1% = — accounts = — + — = —)
All accounts, month by month (May 23 – Apr 25).
- Monthly revenue grew — (— → —)
- While accounts grew only — (— → —)
I want to measure what swings the most and what moves together. I tested the streams from 3 angles:
All accounts, 24 months:
- Typical monthly swing = how much a stream usually moves up or down from one month to the next.
- How I calculated the swing: the % change of each month vs the month before.
| Stream | Top 10 accounts' share of the stream | Typical monthly swing |
|---|
Total revenue: —
- Streams that a few accounts control swing the most.
- Total revenue swings only —.
- Market data at —: it makes about — a month, and next month usually lands within about — of that.
- Non-retail at —: it can double, drop to almost nothing, or even turn negative from one month to the next.
Individuals only, last 6 months (Nov 24 – Apr 25). Correlation runs from 0 (no link) to 1 (always together).
- Why individuals only: this is a customer behavior question (which products does the same person use?), and the recommendations target individuals. Legal entities behave like institutions and would make products look linked when no retail customer behaves that way.
- Why the last 6 months: every product was live by then (options from May 24, the sweep from Nov 24), so every account had the chance to use all of them.
| Stream | Correlation with stock PFOF | How to read it |
|---|
- Stock traders also use cash, margin and stock borrow.
- Market data subscribers use nothing else.
Individuals only, last 6 months. The top 1% of accounts are excluded so a few big accounts don't set the averages.
I checked how Alpaca's B2C product actually works.
Basic is free; Algo Trader Plus is —/month.
→ I assumed that to the — rows.
Source: Market Data API ↗Already exists for active traders (from — deposits).
→ I build on it rather than propose a new program.
Source: Alpaca Elite ↗Exist on the Trading API.
→ This likely explains the legal entities in a B2C dataset.
Source: Business Accounts ↗What I found:
- Revenue grew — (— → — a month). Accounts grew only —.
- Most of the jump came in one quarter, Jun → Sep 24 (— a month). — of that came from three groups of large new accounts: Argentina, one Cayman legal entity and 4 Spanish accounts.
- Since then, everyone else grew — (— → — a month). The Spanish accounts stopped earning after Sep 24.
Conclusion
- The step change came from landing a few large accounts, which makes revenue fragile.
- Lasting growth needs more accounts earning, not only more revenue from a few.
What I found
- Cash interest fell from — → —.
- Stock PFOF rose from — → —. About half of that rise came from the new Argentine traders.
- Newer products went from — → —.
Conclusion
- Revenue depends less on interest income.
- It depends more on trading by a few large accounts, so it's less diversified than it looks.
What I found:
- Signups tripled, from — a month to — a month.
- New signups convert well: — earn at least once, most of them in their first month.
- The older base doesn't: only — earned anything in 24 months. Why the older base never started isn't in the data. Funding, first-trade and login data would tell us which, and give a full funnel.
New accounts per month
Who earns at least once
Conclusion
- Acquisition works. Getting accounts to start earning is the gap.
- — open accounts have never earned anything, most of them in the older base.
What I found:
- Cash interest grew — (— → — a month).
- One Cayman legal entity, which joined in Apr 24, makes — of that —.
- Everyone else stayed flat at —–— a month. Paying accounts grew —, so interest per account fell (— → — a month).
Explanation:
- The jump is one account, most likely holding a large cash balance.
Conclusion
- The cash interest "growth" is one account.
- For everyone else, interest income per account is shrinking.
What I found:
- US: grew — (— → — a month). Paying traders rose — (— → —) and PFOF per trader doubled (— → —).
- Argentina: a dozen new accounts made — of individual stock PFOF since Aug 24.
- Other international: a spike in Jul–Sep 24, mostly 4 Spanish accounts, that faded.
Explanation:
- Argentina likely reflects strong local demand for US-dollar assets.
- US growth reflects more active traders trading more in a strong market. (I can't separate trading volume from PFOF rates without trade data).
US stock PFOF per month, individuals
Conclusion
- US growth is the healthiest growth in the dataset: broad and repeatable.
- Argentina is a big opportunity and a big concentration risk at the same time.
What I found:
- Margin interest grew — (— → — a month on average since Oct 24).
- Borrowers more than doubled (— → —).
- Outside the top 10 accounts, margin revenue grew — (— → — a month).
Explanation:
- More customers are borrowing to trade.
Borrowers per month
Margin interest outside the top 10
Conclusion
- Margin is a healthy, broad stream worth growing.
- Margin borrowers are a natural next step on the product ladder (see Correlations).
What I found:
- Market data (Dec 23): — in Jan 24 → — a month. The — plan grew from — → — subscribers.
- Options PFOF (May 24): — in Apr 25, from — traders, — the first month.
- Crypto wallet (Dec 23) and the FDIC sweep (May 24) stay below — a month. Crypto had — payers in Apr 25.
Explanation:
- Market data sells to developers building on Alpaca's API (see Correlations), so it grows with API adoption.
- Options is still ramping, with monthly spikes.
- Crypto: no clear reason in the data; likely a weak fit for an audience that comes for stocks and APIs.
Market data
Options PFOF
Crypto wallet
Conclusion
- Market data and options are working.
- Crypto isn't, as a B2C stream.
What I found:
- The streams few accounts control swing the hardest.
- Market data is the steadiest (—): its top 10 hold just —. It makes about — a month, and next month usually lands within about — of that.
- Concentration alone doesn't cause the stream volatility problem (margin is — top 10 but swings only —).
- Total revenue swings only —, because the streams partly offset each other.
Typical monthly swing vs top 10 accounts' share
Conclusion
- The streams a few accounts control swing the hardest.
- Market data is the most predictable revenue.
What I found:
- Stock PFOF moves with cash interest (—), margin (—) and stock borrow (—).
- — of margin borrowers (—) and — of stock borrow payers (—) also trade stocks.
- Options is only weakly linked (—): just — of stock traders (—) trade options.
- Why? If I have the data of "options eligibility, approval level and application status", it would help me answer "maybe not eligible, not approved, or not aware?"
- One interesting point: options also reaches people beyond stock traders. — of options traders (—) don't trade stocks at all.
Conclusion
- A funded, active stock trader tends to use several products, so cross-selling should start there.
- Options is the least-used add-on among stock traders (—).
What I found:
- Revenue per account rises with every product: — (1 product) → — → — → — → — (5+), —.
- — of accounts (— of —) use only one product.
- Stock traders who also trade options earn — vs —; those who also use margin earn — vs —.
Conclusion
- The product ladder is real, and most accounts are on the first step.
- Heavier traders pick more products on their own, so cross-selling should be tested with holdouts (Rec 2).
What I found:
- Market data has no link to any other stream (— with stock PFOF).
- The — plan adds real-time data from all US exchanges. Yet in Apr 25, only — (— of — — subscribers) generated any revenue beyond the —.
- Subscribers who also trade stay longer, in every month since Jan 24: on average — still pay the next month, vs — for data-only. In early 2025 (— vs —), — traders stopped paying in an average month, vs — data-only.
- When they stop paying, — data-only subscribers (—) close their account, vs — traders (—) (Feb 24 – Apr 25).
Still paying the next month
When they stop paying, they close their account
Conclusion
- The — plan attracts serious algo builders, but most use Alpaca for data, not trading.
- Getting them to trade pays twice: trading revenue on top of the —, and longer subscriptions.
- The first month is the lever: new subscribers who trade in month 1 stay at —, vs — for data-only (Rec 3).
Before showing my 3 recommendations, I want to share how I reached them.
- I listed all the identified opportunities in the whole exercise, then prioritized them,
- then came up with multiple recommendations, then focused on 3 recommendations.
Hover a step to see the details behind it.
- — of the Jun → Sep 24 jump (—/month) came from a few large new accounts.
- The top 1% (— accounts) make — of revenue, and the streams they control swing the hardest.
What I see is that the accounts that carry revenue today are also the biggest growth upside.
- Watch revenue-at-risk: alert when a top 300 account's activity drops vs its own 3 months average, with a named owner for each account.
- Proactive Elite invites for eligible accounts (from — deposits). We don't wait for top accounts to find Elite on their own. Invite them, so they feel valued and are less likely to leave.
- Find more like them: trace how the mid-2024 accounts arrived (partner, referral, sales), then run a look-alike test in that channel, starting with demand for US dollar assets like Argentina's users.
Success metrics:
- Growth: number of accounts earning $1K+/month (— in Apr 25)
How many accounts bring in $1K or more in a month. If we're finding more high-value accounts, this count rises above today's —. - Protection: 90-day revenue retention of the top 300 accounts
Of what the top 300 accounts earn us this month, how much the same accounts still earn us 90 days later. Close to 100% means we're keeping them; a drop is an early warning. - Health: top-12 share of revenue falls while total revenue grows
It should go down while total revenue goes up, meaning growth is spreading across more accounts, not that we lost the big ones.
- Top accounts are real customers, not misclassified omnibus or professional accounts.
- Argentina's demand for US-dollar assets continues.
- We can find out how these accounts arrived.
- — of earning accounts (— of —) use only one product, while revenue per account climbs from — → — with 5+ products.
- Funded stock traders already add cash, margin and stock borrow on their own. Yet only — of them (—) trade options and ~— (—) use margin.
→ Most accounts sit on step 0 or 1, and the ones that climb earn much more.
I propose 4 levers. A lever is one action we pull to move accounts up the ladder.
Step 0 → 1: track the first steps (KYC, funding, first trade) to see where accounts stop. Test every lever with a 10% holdout: keep a random 10% of eligible accounts out of each lever, and compare them with the rest. The gap between the two groups is our real impact, since heavier traders may add products on their own anyway.
→ In total, ~—/month (~—/year). It's smaller than Rec 1, but it comes from thousands of accounts rather than a dozen, so it's steadier. The holdouts will show how much of it is real.
Success metrics:
- Ladder: % of accounts using 2+ products (— today)
- Activation: never-earned accounts making their first revenue each month
- Attach: options and margin uptake among stock traders, vs holdout (— and — today)
- Converted accounts earn like today's average accounts outside the top 1%.
- Options and margin need suitability approval.
- The — accounts are still open and reachable.
- Market data is the steadiest stream (—) and grew from — → — subscribers. Which is a great entry point.
- Only — (— of —) generate any revenue beyond the —.
- When "data only" subscribers leave, — close their account, vs — of traders.
The first month decides whether a subscriber stays, and whether they ever trade.
- Make the move from paper to live seamless: I haven't seen how this move works today. So my first step is to walk through it with the team, find every blocker that stops a developer from going live, and remove it.
- Better first-month onboarding: guide new subscribers step by step toward their first real trade.
- An incentive to go live: for example, refund the first — once they deposit money and place a real trade.
- An early-warning alert: when a new subscriber's activity drops in month 1, reach out before they cancel.
Success metrics:
- Retention: month-1 retention (— today, target —)
- Activation: % of new subscribers trading live within 30 days (— today)
- Business: total revenue per subscriber (data + trading)
- The — rows are the Algo Trader Plus plan.
- Trading partly causes the higher retention, rather than only reflecting more committed users.
- — new subscribers a month holds.
- We see revenue, not what drives it. No balances, trades, prices or costs: I can see what we earned, but not why, or what it cost us.
- We can't see the customer journey. No signup, funding, first-trade or closing dates; an account's first month in the data stands in for its signup.
- The "B2C" data isn't pure B2C. It includes — legal entities and non-retail revenue, and some negative values with no explanation.
- 24 months is short. It includes rate cuts, an election and strong markets, so one-off events are hard to tell apart from trends.
| Data | Would answer… |
|---|---|
| How each big account found us (partner, referral, sales), and what we launched or ran each month | Why did Argentina, the Cayman entity and Spain arrive in mid-2024, and how do we find more like them? (Trend 1) |
| Each account's first steps: KYC approved, funded, first trade, last login, paper or live | Where did the — dormant accounts stop, and why? (Trend 3) |
| Cash balances and the interest rate we pay customers | Is cash interest falling because of rates, the sweep, or less cash? (see Contributing Factors) |
| Number of trades and the PFOF we earn per trade | Did US traders trade more, or did we earn more per trade? (see Contributing Factors) |
| Options eligibility and approval | Why do only — of stock traders trade options? (see Correlations) |
| Free-plan users, API and paper trading usage, cancellation reasons | What moves a developer from free to — to live trading, and why do new subscribers leave after one month? (see Correlations) |
I used Claude as my data analysis partner to process — rows and break it down in the way I needed.
I used it also to draw charts to help visualize my raw Excel data findings.
I worked on the PM Interview Data sheet ↗ that I received. I built on it all the analysis tabs I needed.
Everything here in the notion document file is based on my findings in the sheet.