<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Malhar Lakdawala</title>
    <description>The latest articles on DEV Community by Malhar Lakdawala (@malharlakdawala).</description>
    <link>https://dev.to/malharlakdawala</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4063046%2F2d9c0f38-f9a9-4fe1-a527-c4592f052c67.jpg</url>
      <title>DEV Community: Malhar Lakdawala</title>
      <link>https://dev.to/malharlakdawala</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malharlakdawala"/>
    <language>en</language>
    <item>
      <title>Building Self Hosted Apollo.io Style Prospecting UI on Top of Blitz API</title>
      <dc:creator>Malhar Lakdawala</dc:creator>
      <pubDate>Sun, 09 Aug 2026 10:36:56 +0000</pubDate>
      <link>https://dev.to/malharlakdawala/building-self-hosted-apolloio-style-prospecting-ui-on-top-of-blitz-api-4kbk</link>
      <guid>https://dev.to/malharlakdawala/building-self-hosted-apolloio-style-prospecting-ui-on-top-of-blitz-api-4kbk</guid>
      <description>&lt;p&gt;Outbound prospecting tools have become essential for sales teams, founders, and agencies. However most of the best tools are recurring per seat software and lock you into a specific stack.&lt;/p&gt;

&lt;p&gt;Blitz API already has all the people and company data you need to perform prospecting, but it only exposes this data through an API and MCP server. If you want a nice UI on top of it, user management or data export features, you have to build that yourself.&lt;/p&gt;

&lt;p&gt;This is why I built BlitzProspector.&lt;/p&gt;

&lt;p&gt;It is an opensource self hosted web application built on top of Blitz API that provides an Apollo.io style UI for managing your outbound sales prospects and allows you to self-host it all with a single docker compose command.&lt;/p&gt;

&lt;p&gt;It is MIT licensed.&lt;/p&gt;

&lt;p&gt;The problem&lt;/p&gt;

&lt;p&gt;Most prospecting platforms are basically a combination of three areas in one hosted SaaS:&lt;/p&gt;

&lt;p&gt;Data&lt;/p&gt;

&lt;p&gt;User Interface&lt;/p&gt;

&lt;p&gt;Team management&lt;/p&gt;

&lt;p&gt;While it is really convenient for the end user to have everything in one place, it also means they are now dependent on another hosted platform plus a subscription.&lt;/p&gt;

&lt;p&gt;Blitz API already solves the data layer. It has search functionality exposed as an API, but doesn't offer a UI on top of it. This leaves room for a product that would focus on self hosting.&lt;/p&gt;

&lt;p&gt;What BlitzProspector offers&lt;/p&gt;

&lt;p&gt;The author’s objective was to offer a familiar user experience (to Apollo customers) while providing a quick and convenient setup and deployment.&lt;/p&gt;

&lt;p&gt;Some of the core features include:&lt;/p&gt;

&lt;p&gt;Multiple user accounts and roles (Admin, Member)&lt;/p&gt;

&lt;p&gt;Search people and companies&lt;/p&gt;

&lt;p&gt;Email validation&lt;/p&gt;

&lt;p&gt;CSV exports&lt;/p&gt;

&lt;p&gt;CRM export profiles&lt;/p&gt;

&lt;p&gt;Deployed with Docker first approach&lt;/p&gt;

&lt;p&gt;Using SQLite database&lt;/p&gt;

&lt;p&gt;Open-sourced under MIT license&lt;/p&gt;

&lt;p&gt;A functioning instance can be launched with a single command using Docker Compose instead of relying on a cloud provider.&lt;/p&gt;

&lt;p&gt;Architecture&lt;/p&gt;

&lt;p&gt;The project uses a simple stack for the app.&lt;/p&gt;

&lt;p&gt;Backend&lt;/p&gt;

&lt;p&gt;The backend is built with FastAPI framework which is used to expose an API and the business logic of the application.&lt;/p&gt;

&lt;p&gt;Frontend&lt;/p&gt;

&lt;p&gt;The user interface is built using react with vite, providing a responsive single page application.&lt;/p&gt;

&lt;p&gt;Storage&lt;/p&gt;

&lt;p&gt;Storage is handled by SQLite which makes it really easy to setup and launch the app locally.&lt;/p&gt;

&lt;p&gt;Because the application is self hosted, users remain in control of their own environment instead of depending on another hosted SaaS platform.&lt;/p&gt;

&lt;p&gt;Extensible by design&lt;/p&gt;

&lt;p&gt;One of the design goals was to make integrations as easy to extend as possible&lt;/p&gt;

&lt;p&gt;Email verification providers&lt;/p&gt;

&lt;p&gt;Instead of being tied to a specific verification service, BlitzProspector uses an abstraction of a provider.&lt;/p&gt;

&lt;p&gt;Additional providers can be added by implementing a particular verification interface and registering a provider.&lt;/p&gt;

&lt;p&gt;In case no provider is configured, the application does not attempt to perform any verification requests.&lt;/p&gt;

&lt;p&gt;Thus, an integration becomes optional and is not mandatory anymore.&lt;/p&gt;

&lt;p&gt;CRM export profiles&lt;/p&gt;

&lt;p&gt;CRM exports follow a registrybased approach&lt;/p&gt;

&lt;p&gt;Currently, the following integrations are supported:&lt;/p&gt;

&lt;p&gt;Instantly&lt;/p&gt;

&lt;p&gt;Smartlead&lt;/p&gt;

&lt;p&gt;HubSpot&lt;/p&gt;

&lt;p&gt;For most CRMs, adding a new profile boils down to describing column mappings. As a result, the export logic remains consistent and easily maintained.&lt;/p&gt;

&lt;p&gt;Flexible filtering&lt;/p&gt;

&lt;p&gt;One of the critical features of prospecting is being able to use the right search filters. BlitzProspector implements search in a way that is similar to how Apollo query language works. It maps each Apollo style field to a specific Blitz API field.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;p&gt;Person filters&lt;/p&gt;

&lt;p&gt;Job title&lt;/p&gt;

&lt;p&gt;Seniority&lt;/p&gt;

&lt;p&gt;Department&lt;/p&gt;

&lt;p&gt;Country&lt;/p&gt;

&lt;p&gt;City&lt;/p&gt;

&lt;p&gt;Region&lt;/p&gt;

&lt;p&gt;Connection count&lt;/p&gt;

&lt;p&gt;Company filters&lt;/p&gt;

&lt;p&gt;Industry&lt;/p&gt;

&lt;p&gt;Employee count&lt;/p&gt;

&lt;p&gt;Founded year&lt;/p&gt;

&lt;p&gt;Keywords&lt;/p&gt;

&lt;p&gt;LinkedIn followers&lt;/p&gt;

&lt;p&gt;Website traffic&lt;/p&gt;

&lt;p&gt;Headquarters location&lt;/p&gt;

&lt;p&gt;The mapping layer keeps the UI intuitive while translating searches into Blitz API requests.&lt;/p&gt;

&lt;p&gt;Design Choices&lt;/p&gt;

&lt;p&gt;Keeping the project modular was more important than adding every possible feature.&lt;/p&gt;

&lt;p&gt;Instead of having providers or export formats built into the application, both are implemented as extension points allowing to add new ones without large code changes.&lt;/p&gt;

&lt;p&gt;Similarly, the decision to go with Docker first approach reduces the burden of selfbhosting while keeping the default implementation simple with SQLite.&lt;/p&gt;

&lt;p&gt;The similar consideration applies to every part of the system, focusing on the most useful features with the cheapest possible implementation and reducing the surface area of possible changes.&lt;/p&gt;

&lt;p&gt;What's next&lt;/p&gt;

&lt;p&gt;There are several obvious directions for taking this project further.&lt;/p&gt;

&lt;p&gt;The most obvious ones are more email verification providers, additional CRM export formats, recurring searches, additional query filters, and several general quality of life features.&lt;/p&gt;

&lt;p&gt;Since the project is open source under the MIT license, contributions are welcome.&lt;/p&gt;

&lt;p&gt;Final thoughts&lt;/p&gt;

&lt;p&gt;Blitz API offers the data layer for prospecting. BlitzProspector is about the surrounding bells and whistles, the modern UI, user management, filtering, exports, etc, and an overall pleasant self hosted experience.&lt;/p&gt;

&lt;p&gt;If you are looking to emulate the Apollo workflow, but want to avoid adding yet another 3rd party SAAS to your stack, hopefully this project serves as a good foundation.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>react</category>
      <category>showdev</category>
      <category>python</category>
    </item>
  </channel>
</rss>
