Mastodon

How I built one of the biggest BIN lookup sites in the world, and how it was killed

Posted by Matt Birchler
— 15 min read
How I built one of the biggest BIN lookup sites in the world, and how it was killed

Below is a lightly-edited transcript of a talk I gave recently at work where I walked through the story of how I built Quick BIN Lookup and how it rose and fell to irrelevancy over the last 8 years.


Hello! Today, I wanted to tell the story of how I unexpectedly made one of the biggest bin lookup sites in the world, and how a few months ago it was killed, which has been quite the journey. So I'm going to walk you through how I made the thing, and then all the adventures along the way. And then at the end, we'll kind of have some takeaways that I, in retrospect, learned from this and didn't really put together until I made this presentation.

Back in 2015, I joined NMI. Now it seems like so long ago. On Saturday, we'll hit my official nine years here. So fingers crossed, make it through the week. But yeah, I started in our support team. I was not a developer. I was not a product person. I honestly didn't have a ton of relevant experience to work here, but they did hire me, which was great. And the best thing I could say related to this project is that I knew enough code to be dangerous. I had a WordPress site, and I had tweaked that WordPress site on many occasions to do little things differently. So I kind of knew how PHP worked, but that was basically it.

In my time in our support team doing customer service and integration support, I found I was regularly doing bin lookups. So looking up the first six digits of a credit card number to see who issued this card, what country is it from, and who do I contact if I need to contact the card issuer. I didn't even know what a bin was before I worked here, but I learned that they were a thing, and they were quite helpful in troubleshooting sometimes. There were a bunch of websites out there that did this already. So I would just Google "bin lookup", and a couple of options came up.

While I didn't know how to develop a site or any of the product and design parlance that I've learned over the years at the time, I did have opinions on software, and I thought they all kind of sucked in different ways. They were ugly, or they were rate-limited, or they were upselling you on things. They were all annoying in their own special ways. The following year, I just decided, let's try to build a better one. I, again, knew enough code to be dangerous. I knew a little bit of PHP. But I actually learned quite a bit working in our support team. I was helping our developers who were using NMI's APIs, I was helping them integrate. Just by osmosis and dealing with it, I was learning things.

I found binlist, which was, I think, the most popular– probably still is the most popular bin lookup site out there, free one at least. They had an API. It looked a heck of a lot like our query API. And I was like, I know this.

I can do this. I wrote this pretty basic single-page HTML, or I guess PHP page. I threw it up on a DigitalOcean server that was $5 a month. And I started using it myself. It was great to have this little thing.

Those are the first 20-some lines of the application. I took that screenshot about an hour ago. That's effectively unchanged in the past eight years since I made this. It's not fancy. It's not elaborate. There's no SEO. It's pretty bare-bones, but it did what I needed it to do.

This was the earliest screenshot of the site I was able to find. This is from, I think, exactly what it looked like when I considered it like a 1.0 for myself. It had a few differences from the other things out there. No ads. Awesome. The other ones were full of ads. Ads above the search box, ads below it, ads on the sides. Ads when you do the first click and it shifts the whole website so that you click an ad.

I did input validation. A brilliant idea that a lot of these places did not do. I didn't want to handle any sensitive information on this, even though it was just at an IP address that only I was using. It limited you to six numeric characters. Brilliant.

I thought the UI was clean, not really to my current style. But at the time, I guess I was in the dark modes. This looked nice to me.

I didn't upsell you on anything. There were no limits. There were no captures. There was nothing slowing you down. You just loaded the URL. You entered your bin. You hit Search, and you got the information.

It kind of went through this phase where I started using it and I was enjoying it. It was a perfect situation because I was a user and I was the developer. So I was really just making exactly what was useful to me.

We were all in the same room back then. The entire support team was eight people and a couple of cubicles. People would see this on my screen. They'd be like, oh, what are you using? I would tell them, here it is. Here's the IP address of the silly site. They started using it. They kind of stuck with it. It's for all the same reasons that I mentioned on the previous slide. It was just easier to use and had the same data that other sites had. So it was pretty nice. They seemed to use it. I was like, hmm, maybe I shouldn't be giving out just an IP address. Let me get a domain for this.

I needed a domain for this website. It was called Quick BIN. The "lookup"– well, we'll explain. It was called Quick BIN. I bought quickbin.com. I thought it was pretty great that exactly what I wanted was available for like $13. Within seven days, I changed it to Quick BIN Lookup.

Not because I like it more, but because there's a company called BAM that sells a product called a Quick BIN, which they have trademarked. They threatened litigation on me. So I immediately changed it with no hesitation because, dear God, this is just a project that me and a couple of people at work use. Let's not fight the almighty BAM company. That screenshot is from a couple of days ago. Apparently, they outlived my site. So good for them. I guess they won in the end.

Here are the analytics for the site from when I launched it up to early 2023. My analytics stopped at that point, but it gives you kind of an idea for how it was going. It started off slow. You can see for the first two years, very, very little was happening. Then it started to creep up. In 2019, it really kind of started to get some momentum and started to get higher. Then for 2021 through '23, kind of stayed pretty steady, kind of hit a plateau. But it was lots of people coming to the site and using it. This was cool because I did absolutely zero effort to market this at all. The page is the least HTML possible. There is no SEO work. The SEO would probably hurt it with how good I am at SEO. I didn't buy ads anywhere. I didn't advertise it. It exclusively started internally as a tool that someone at the company made that was useful and grew from there.

More people found it. I was on a call at one point with one of our partners who was sharing their screen. This would have been in 2019, 2020, somewhere in there. They were sharing their screen. We had to look up a bin number. They went to my site, which they had bookmarked. They didn't know– it said Matt Birchler at the bottom of the site. But it wasn't even a thing. Like, "oh, I'll use the site that he made because he's on the call"– they just had it bookmarked. That was cool to see it in the wild. I was able to see from my analytics that I wasn't just getting new people. Most of the people coming to the site were repeat users, people who had bookmarked it or just googled it every time or whatever. But most of the people using the tool were coming back for a second or third or hundredth time. So it seemed to be connecting with people.

Even a couple of times during this run, if you just Googled "bin lookup", it was the number one result, ironically, over Binlist, whose API was using to serve up the same product they had just with no ads most of the time.

But eventually, you kind of want to make a little bit of money on this. So I did add ads to the site eventually. I did one ad, just a single ad, a tasteful ad. I used Google AdSense at first. I was alerted almost immediately that you should go into your Google AdSense settings and turn off some advertising categories because all sorts of things advertise on Google. If you don't do that, apparently, they will bid very highly in these ad auctions. People will be like, why are you advertising this strange stuff to me? So turn off the sketchy ads. That's a good tip if you ever do ads.

Eventually, I moved over to Carbon ads, which were a nicer ad platform, and paid out better than Google AdSense. That's who I used from 2020 through today. You can kind of see the chart there. I've removed the y-axis because, as any good American, I'm embarrassed to talk at all about money. So we'll just give you kind of a Bezos chart of how it went. Pretty low. I had a very strange spike in mid-2021, but then kind of leveled out to a good amount. Obviously, not enough for me to leave my day job, but enough to make all my tech purchases much easier to justify. In 2023, as the ad market kind of collapsed and is kind of still not in a good state, that number just went down and down and down. All the way today, the far right is actually yesterday's. It's effectively zero. I went from making zero money on it to making pretty great passive income in the grand scheme of things to making nothing again.

For a while, this was the dream of passive income. I literally wrote the code and then did not touch it for years. I didn't think about it most days unless I was using it. I didn't have to troubleshoot it. It just kind of worked, which was great.

In 2019, I did do a rebrand. I got tired of the dark theme. I went the complete opposite direction with color and brightness. In retrospect, maybe a little too fun for a professional tool like this. But made literally no UI changes, just changed the CSS. That was good.

In 2022, I did the final redesign a couple of years later. Again, I kind of just made it a little more minimal, a little nicer. This time, I did add my one new feature edition in the entire eight-year run of the product. I added copy buttons. It's not filled out in the screenshot. But whatever info was in each table row, you would be able to hit the Copy icon and save that to your clipboard and reduce the error. Tiny little feature, but I was happy to add it. I was happy to figure out how to do it at all. This was 2022. This was before I had ChatGPT to just tell me how to do it. So I had to figure it out the old-fashioned way.

Everything was going great. I used it. People at NMI used it. People in the world were using it. Then December 14, 2023 happened.

This is when things started to really go downhill. Binlist, whose API I had been using this whole time to make the product work, announced that as of December 14, they were updating the rate limit on their API to much lower than I needed. They lowered their rate limit to five requests per hour. During business hours on a weekday, I would do 10 requests per minute, which is like 300-something times over their rate limit. What happened is– I think they waited a few days to actually have this impact me. But at some point, while I was on Christmas break, not working, not looking at this, not paying attention, my website just broke. Or at least the first five requests every hour worked, and then the next several hundred failed, which was not a great experience.

I didn't notice for weeks, because I don't have contact information on that page. I don't have any support contact, because again, it's a very minimal thing, little side project. December 14, they basically broke my site for 99% of the requests. They have some stuff here. This is how I found out.

On January 4, so very soon after coming back to work, John (name changed for this post) messaged me and said, "hey, your Bin look-up site is broken. Gives me no results". He had to use the enemy, Binlist. This actually kind of kicked my whole rest of the day into what's going on with the site. I need to fix it. It was an interesting thing I've never really had to do. I had to troubleshoot. I had to go into production and see what was happening and figure out what the issue was. Dear listener, I do not have a dev environment. I don't even have a GitHub for this project. I just have the files on production. So I was just looking through the server and seeing what was happening. Do I have logging? No, I don't have logging. I have no idea what's going on. I have no alerting setup. I am but a simple product person doing their best.

I was on the production server. I was seeing the error myself. I was trying to figure out what was going on. Eventually figured out how to do it. I had to post a status message, which felt weird and way more corporate than I'd ever felt in my life, even though I work at a big company. But yeah, had to post a status message that was like, hey, we're looking into the issue. Sorry about the issues that you maybe run into. If we go back to this message from Binlist, they say, hey, if you need to do unlimited lookups, you can email us at this email. I emailed them at the email, they ghosted me, or fill out this form, which was a Google form, to basically do the same thing. They never responded to me there. So I tried to see if they could do an exemption for me. They just never responded to me, which was frustrating and annoying. They do have this new service called IINList, which is a higher-quality endpoint API that you can use. You can get better bin data. It's fully supported and will actually work. You won't be just using this free API that could go away at any time.

I looked into that. I wasn't going to be able to use that. I priced it out for whatever my current level of traffic was. It would have cost me almost $600 a month in just API fees, which, if we refer to the ad revenue slide, is not at all what the basically $0 a month I was making in ads was going to pay for. So I was completely priced out of it. I looked into other options. None of them were particularly good. There are some free APIs out there. I could maybe roll my own with some sort of publicly accessible list of bins. But it was not looking good. So I just basically gave up.

This is what the website looks like today.

If you want, you can check it out, quickbinlookup.com. But yeah, it's basically saying, hey, they severely limit their API. Their paid options are hilariously expensive. Again, just being able to write ridiculous error messages is very nice on these personal projects. But yeah, it effectively doesn't work. The server is still up. But unless you're very, very lucky, it's not going to work for your requests. Frustrating. I'll eventually take it down. But that's kind of where it is today.

What did I learn over the eight years that I've been doing this site? None of these are guaranteed to be original, just things that I found interesting or notable.

One, make software you want to use. This is very old advice. But it was very useful making a piece of software that wasn't just for some hypothetical person out there. It was made for me. I had a problem. I wanted a better tool. So I tried to make the better tool. That means I'm my own user. So my priorities were pretty aligned with what my users wanted because I was the user. I knew exactly what I wanted and was able to build it. I didn't build anything superfluous. I didn't waste time on things that I thought maybe users would like, but it turns out they don't. I knew what I wanted, and I just built it. It also helped when I was frustrated and couldn't figure out how to do something. Again, I knew enough code to be dangerous, but I was not a pro. I was figuring it all out as I went. It just helped to know that it was useful and helpful to me and valuable. So whenever I was frustrated, I was able to kind of stay more engaged because I was invested in this tool existing.

It also was a good reminder that MVP doesn't mean bad. It doesn't mean a bad version of the product. It shouldn't mean that. What it should mean is it's the minimal product that will solve the problem for the user. That is exactly what I built. It is the minimal solution. It does just what I needed it to do and nothing else. I didn't ever add really any features to it. Like I said, I added a copy button. But that's really it over the years. That's because the MVP can also be enough. Not everything has to be some massive project that keeps getting updates, that keeps getting better over time. You can just release a minimal tool that does one thing well, and that could be totally fine.

This is a big one, and this would be something I would be less lighthearted about if this was how I paid rent and put food on the table. But pinning your business to someone else is pretty risky, especially when it's something that is, there's no contract involved, there's no relationship, there's no any sort of guarantees that anything will be around forever. In this specific case, I directly replicated the product of the API provider that I was using, and they don't make money from their API, although they're trying to now. They didn't make money from their API, they made money from people visiting their site with ads plastered all over it. I was taking that away. So, totally reasonable on their part to maybe not want this sort of thing to exist. I have no idea if they even ever knew I existed. I have no proof at all that they did anything knowing that my site was out there, but if they did, I wouldn't blame them either. So, yeah, just, you're always gonna rely on somebody else for something, but yeah, just, it's good to be aware of those. If it's essential for your livelihood, you should definitely understand those risks and ideally have a plan if those things go away. Went down and I realized they weren't a solution, I would have been smarter for me to have a backup solution ready to go in case that day ever came.

The last thing, sometimes you just get lucky. I did not try at all to make a successful product. I didn't try at all to market this. Like I said I didn't write any SEO. An SEO expert would just lose their mind if they saw the code. I didn't, by advertising, I didn't really do anything. It spread mostly by word of mouth just 'cause it was useful, if I could be so bold to say good product that solved a problem for people and it eventually just did well. That's not gonna happen all the time. I've also made little things that get precisely one user myself and that's how probably most products are. One person uses it, 10 people use it, but they never really get to a large market share. That's fine. It's not a huge deal, but there's definitely luck involved in what hits at the right time. You can't plan for that. You just kinda have to get lucky sometimes.

That was all I had to share today. It's been lots of fun and definitely terrifying to show my code to a room full of developers. If you guys have any questions or anything, I'd be happy to chat about them. Thank you!