A readout to a client's leadership team
Case study

Praxis Rock Advisors moved investor data off brittle no-code tools

Investor outreach ran on stitched-together no-code tools that broke as data grew and had no real security or governance.

Praxis Rock Advisors · Sales and pricing

60%less manual cleanup of investor contact data

The workflow before#

Praxis Rock Advisors runs fundraising and investor outreach for the firms it works with, so its investor database is the business. That database lived across a stack of no-code tools stitched together over time. The rules that mattered most, such as how tags carried from one record to another, how blocklists applied and which system won when two disagreed, were buried in tool settings and written down nowhere. As the database grew, syncs broke without warning. Every import brought in new duplicates that someone had to find and clean up by hand. And the setup couldn't meet the security expectations of the firms whose investor relationships Praxis Rock was trusted to manage.

What we built#

We replaced the no-code stack with an application built around how Praxis Rock actually raises capital. Before writing any code, we pulled every hidden rule out of the old tools and wrote it down. Those rules are now tested code, the investor database has one home, and bad records are stopped on the way in instead of cleaned up afterward.

A rulebook pulled from the tools

We ran workshops with the Praxis Rock team to inventory every piece of business logic hidden in the no-code tools: tag propagation, blocklist precedence and sync direction. That inventory became the specification. We did this first because the old setup's real behavior was the only true record of how the business worked, and rebuilding without it would have meant losing rules nobody remembered setting.

One app for the fundraising workflow

The team works in a custom web application shaped around its fundraising process, backed by a single PostgreSQL database as the system of record. The rules that used to live in tool settings are now Python code with tests, so a change to how blocklists apply is reviewed and tested before it touches a live investor list.

Bad data stopped at the door

Every import runs through validation and deduplication before anything is written, and the database enforces uniqueness on its own. We put governance at the data layer rather than in the screens, so no import path, script or user can slip a duplicate past it. That's what takes manual cleanup off the team's plate.

Access by role

Only authorized users can import or update investor data, and access is set by role. Praxis Rock can now show the firms it works for exactly who can touch their investor relationships.

How we delivered it

Discovery workshops came first and produced the written rule set the build was tested against. We then built the database, the rule engine and the front end, migrated the investor data through the new dedup and validation step, and moved the team over once the new app matched the old tools' behavior on real records.

Before and after#

MeasureBeforeAfter
Business rulesHidden in no-code tool settingsCataloged and enforced in code
Duplicate investor recordsCleaned by hand after each importBlocked at import
Time on manual data cleanupBaseline60% less
Who can change investor dataAnyone with tool accessAuthorized roles only

What's next#

With clean, deduplicated investor history in one database, Praxis Rock can start using it to work smarter. Next up is retrieval over that history to help the team decide which investors to approach first and to draft a short briefing before each call.

ShareLinkedInEmail

The discovery workshops produced a written rule set covering tag propagation, blocklist precedence and sync direction. Each rule was implemented as tested Python service code rather than tool configuration, so behavior is versioned and covered by tests.

PostgreSQL holds investor, contact and activity records with uniqueness constraints. Imports pass through a validation and deduplication step before any write, and updates run through controlled paths in the service layer.

A React front end exposes the fundraising workflow, with role-based access control so only authorized users can import or update data.

Next step

Let's build the case study we tell next.