DEV Community

Patrick Amey-Jones
Patrick Amey-Jones

Posted on

I got tired of checking 50 Secretary of State websites, so I built an API

Last year I was helping a fintech startup with their vendor onboarding.
Part of the process was verifying that each vendor was actually a registered business in good standing. Sounds simple enough.

It wasn't.

To verify a single business, I had to figure out which state they were registered in, find that state's Secretary of State website, navigate their(usually terrible) business search interface, solve a CAPTCHA, find the right entity among similarly-named ones, and screenshot the results for our compliance records.

Each lookup took 10-15 minutes. We had hundreds of vendors to verify. I started looking for an API to automate this. There wasn't one. The existing options were either enterprise-only ($50k+ annual contracts) or aggregators with stale data.

So I built one.

What GovLink does

You give it a company name and jurisdiction (state), it returns the official registration data: entity status, good standing, formation date,entity type, registered agent, and more.


bash                                                                    
  curl -X POST "https://govlink.fly.dev/api/v1/verify" \                     
    -H "X-API-Key: your_key" \                                               
    -d "entity_name=Stripe Inc" \                                            
    -d "jurisdiction=DE"                                                     

  Response:                                                                  

  {                                                                          
    "result": {                                                              
      "entity_name": "STRIPE, INC.",                                         
      "file_number": "5765498",                                              
      "status": "Active",                                                    
      "good_standing": true,                                                 
      "formation_date": "2010-07-30",                                        
      "entity_type": "Corporation",                                          
      "agent_name": "CT Corporation"                                         
    }                                                                        
  }                                                                          



Covers all 50 US states. Data is sourced directly from Secretary of State  
offices, not scraped from third-party aggregators.                         

The two-tier pricing thing                                                 

I noticed that a lot of verification workflows involve filtering. You have a list of 100 potential vendors, but you only need full verification on the 10 that pass initial checks.                                              

So I built two endpoints:                                                  

- Pre-check ($0.10) - Just returns status and good standing. Fast, cheap, good for filtering loops.                                                  
- Full verification ($2.50) - Complete entity data, PDF certificate, audit trail.                                                                     

This is especially useful for AI agents. They can do cheap exploration ($0.10 checks in a loop), then only pay for full verification when they've found the right entity.                                                    

MCP support                                                                

I added native https://modelcontextprotocol.io support, so LLMs like Claude can call the API directly during conversations. Point your MCP client at govlink.fly.dev/mcp and the model can verify businesses mid-conversation.  

This felt like the right investment. AI agents are starting to handle real business workflows - procurement, compliance, due diligence. They need reliable data APIs, not web scraping.                                      

Technical notes                                                            

The stack is straightforward: Python/FastAPI, SQLite for customer data, deployed on Fly.io.                                                        

One thing I'm oddly proud of: the customer dashboard is a single 3,200-line Python file with embedded HTML/CSS/JS. No React, no webpack, no node_modules. The entire UI ships as one HTTP response. It has dark mode,  
skeleton loading, keyboard shortcuts, the works.                           

Is this a good idea? Probably not for a team. But for a solo project where I want to iterate fast without context-switching between frontend and backend repos, it works great.                                             

Try it                                                                     

GovLink is live at https://govlink.fly.dev. 10 free lookups to test, then pay-as-you-go.                                                             

If you're dealing with KYB compliance, vendor verification, or building AI agents that need to validate businesses, I'd love to hear what features would be useful.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)