Data scraping and automation projects

Eight builds that collect data from public websites on a schedule, clean it and hand it over as a dashboard, a database or an Excel file, plus a bot that trades on its own: game stats, crypto prices, betting odds, a whisky catalogue, property records, car listings and real-estate listing contacts.

Projects
Eight
What we built
Scrapers, bots, dashboards
Runs
Every second to every two weeks
Output
Dashboard, database, Excel
Updated 14 November 2026

What did BetterAI build in these projects?

Eight data collection and automation systems. Champion Insights gathers League of Legends stats into one dashboard. A Binance automator feeds a Vue.js price dashboard every second, and a betting-odds scraper fills a MySQL database every second. A Whisky Exchange scraper adds an analytical bot, a Racine County scraper turns land records into a property dataset, and a Carlist.my scraper turns car listings into an Excel file. A COTPS automator trades on its own across several accounts, and a fleet of scrapers pulled listing contacts for Obligo.

Why do businesses automate data collection?

The data a business needs often sits on other people's websites, spread over many pages and changing all the time. Copying it by hand is slow and goes stale. A scraper collects it on a schedule, puts it in one shape and keeps it current, so people spend their time on the decisions, not the copying.

See the full case study

What we built, the real screens, how it works and the tech behind it. Free, about 20 seconds.

Add a number if you'd like Haris to call you about a project like this. Seen a case study before? Just enter the same email.

The eight projects

Each one: what it collects, how it runs, what comes out and what it is made with.

01

Champion Insights

League of Legends data into one dashboard

What it collects
Win, pick and ban rates, runes, skill builds and item builds for each champion, from two public stats sites. Duo tier list data for Meta Pairings, plus a Recommended Pairings list the client supplies.
How it runs
Scripts pull the first site's tier lists and build the second site's page addresses from the scraped champion names, pulling that data every two weeks. Duo tier list data feeds Meta Pairings daily. Each champion is classed as Bot or Support.
What comes out
One dataset per champion, shown in a dashboard with Meta Pairings and Recommended Pairings.
Stack
Python scripts and a web dashboard.
ChampionWin ratePick rateBan rateRunesBuilds
Champion A00.0%00.0%00.0%Set 1Skill, items
Champion B00.0%00.0%00.0%Set 2Skill, items
Champion C00.0%00.0%00.0%Set 3Skill, items
Column names are the real output fields. Rows are generic placeholders.
02

Binance automator

Live exchange prices on a Vue.js dashboard

What it collects
The exchange, the crypto pairs, price, quantity, bid and ask.
How it runs
The scraper refreshes every second and feeds the dashboard. It reads prices only. It does not place trades.
What comes out
A live Vue.js dashboard of pairs with price, quantity, bid and ask.
Stack
Web scraping, Vue.js.
ExchangePairPriceQuantityBidAsk
Exchange AAAA/BBB0.000.000.000.00
Exchange ACCC/BBB0.000.000.000.00
Exchange BAAA/CCC0.000.000.000.00
Column names are the real output fields. Rows are generic placeholders.
03

Whisky Exchange scraper

Catalogue scraper and analytical bot

What it collects
Each bottle's brand, name, sub-category, bottler, size in ml, ABV, price, distilled year, bottled year, country and region.
How it runs
Bots run 24/7. They look for bottles with a low price and significant orders, and for high value, and give insights on demand.
What comes out
A clean catalogue table and the analysis on top of it.
Stack
Web scraping and analysis bots.
BrandNameBottlermlABVPriceDistilledBottledCountryRegion
Brand ABottle 1Bottler X00000%0.0000000000CountryRegion
Brand BBottle 2Bottler Y00000%0.0000000000CountryRegion
Column names are the real output fields. Rows are generic placeholders.
04

Carlist.my extraction

Car inventory into Excel

What it collects
For each car listing on a Malaysian marketplace: condition (new or used), brand, model and variant.
How it runs
The scraper reads the listings and writes them into one sheet so the client can sort and analyse them. Price, mileage, year and location are ideas for later and are not built.
What comes out
An Excel file ready to sort and analyse.
Stack
Web scraping, Excel.
ConditionBrandModelVariant
NewBrand AModel 1Variant X
UsedBrand BModel 2Variant Y
UsedBrand AModel 3Variant Z
Column names are the real output fields. Rows are generic placeholders.
05

Betting-odds scraper

Live odds into a MySQL database, 24/7

What it collects
Profit percentages, event details (type, date, time, bookmakers) and game details (teams, scores, sports category) from a public betting-odds site.
How it runs
The scraper runs around the clock and pulls the data every second, then writes it into a remote MySQL database over a secure connection.
What comes out
A structured MySQL database that is always current and ready for analysis.
Stack
Web scraping, remote MySQL.
Profit %EventDateTimeBookmakersTeamsScoreSport
00.0%Event 10000-00-0000:00Bookmaker A, BTeam A, Team B0-0Sport 1
00.0%Event 20000-00-0000:00Bookmaker C, DTeam C, Team D0-0Sport 2
Column names are the real output fields. Rows are generic placeholders.
06

Property assessment scraper

Racine County land records, for wholesale prospecting

What it collects
For each property in Racine County's land records: owner, mailing address, parcel number, tax district, status, site address, and tax fields such as tax year, total due, amount paid, interest, penalty and net mill rate.
How it runs
A custom scraper walks the county land-records pages and fetches the latest assessment data. The structured data is then searched for people who own several properties in the county.
What comes out
A clean property dataset, and a view of owners with multiple properties to approach for wholesale real-estate deals.
Stack
Web scraping, data analysis.
OwnerMailing addressParcel numberTax districtStatusSite addressTax yearTax total due
Owner AAddress 1000-000District 1StatusAddress 200000.00
Owner AAddress 3000-001District 2StatusAddress 400000.00
Column names are the real output fields. Rows are generic placeholders.
07

COTPS trading automator

Hands-free trading on one platform, many accounts

What it collects
It works on the COTPS platform. It logs in to each account, moves through the interface and places over-the-counter and arbitrage trades by rules set in advance.
How it runs
It runs 24/7 without manual input and handles several accounts at once. Account details are protected with encryption and standard privacy practice.
What comes out
Trades placed on the platform, account by account, with no one at the keyboard. Trading carries risk and we make no claim about returns.
Stack
Automation scripts, multi-account handling.
08

Obligo scrapers

Millions of real-estate listings into clean contact data

What it collects
Millions of real-estate listing pages for Obligo, most with the contact details hidden. The scrapers pull the listings and the names, emails and phone numbers behind them.
How it runs
We built a fleet of scrapers and ran them on our own machines.
What comes out
Clean, usable data for Obligo: listings with the contact details attached.
Stack
Web scraping at scale, our own machines.
ListingNameEmailPhone
Listing 1Name Aemail Aphone A
Listing 2Name Bemail Bphone B
Listing 3Name Cemail Cphone C
Column names are the real output fields. Rows are generic placeholders.

How do we build a scraper that keeps working?

A scraper is only useful while it keeps running. We plan for the day a source changes, not only for the day we ship.

  1. Set the scheduleMatch the rhythm to the need: every second for live prices and odds, daily for tier lists, every two weeks for slower data, or 24/7 for bots.
  2. Retry on failureA failed page is tried again instead of leaving a hole in the data.
  3. Check the shapeEach run checks that the fields it expects are still there before the data is stored.
  4. Alert on changeWhen a source stops returning what we expect, we are told, and we fix it.

The eight, drawn out

Keep scrolling to see more.

ChampionWin ratePick rateBan rateRunesBuilds
Champion A00.0%00.0%00.0%Set 1Skill, items
Champion B00.0%00.0%00.0%Set 2Skill, items
Champion C00.0%00.0%00.0%Set 3Skill, items

Champion InsightsPipeline and output columns

ExchangePairPriceQuantityBidAsk
Exchange AAAA/BBB0.000.000.000.00
Exchange ACCC/BBB0.000.000.000.00
Exchange BAAA/CCC0.000.000.000.00

Binance automatorOne-second refresh to a Vue.js dashboard

BrandNameBottlermlABVPriceDistilledBottledCountryRegion
Brand ABottle 1Bottler X00000%0.0000000000CountryRegion
Brand BBottle 2Bottler Y00000%0.0000000000CountryRegion

Whisky Exchange scraperCatalogue fields and analysis

ConditionBrandModelVariant
NewBrand AModel 1Variant X
UsedBrand BModel 2Variant Y
UsedBrand AModel 3Variant Z

Carlist.my extractionFour fields into Excel

Profit %EventDateTimeBookmakersTeamsScoreSport
00.0%Event 10000-00-0000:00Bookmaker A, BTeam A, Team B0-0Sport 1
00.0%Event 20000-00-0000:00Bookmaker C, DTeam C, Team D0-0Sport 2

Betting-odds scraperOne-second scrape into MySQL

OwnerMailing addressParcel numberTax districtStatusSite addressTax yearTax total due
Owner AAddress 1000-000District 1StatusAddress 200000.00
Owner AAddress 3000-001District 2StatusAddress 400000.00

Property assessment scraperLand records to owners with many properties

COTPS trading automatorLogin, rules and trades, 24/7

ListingNameEmailPhone
Listing 1Name Aemail Aphone A
Listing 2Name Bemail Bphone B
Listing 3Name Cemail Cphone C

Obligo scrapersA scraper fleet for listing contacts

What are they made with?

Python scripts for Champion Insights, web scraping with a Vue.js dashboard for the Binance automator, web scraping into a remote MySQL database for the betting-odds tool, web scraping and analysis bots for the Whisky Exchange project, web scraping for the Racine County and Obligo projects, web scraping with Excel output for Carlist.my, and automation scripts for the COTPS trading automator.

PythonWeb scrapingVue.jsExcelScheduled runsAnalysis botsMySQL

Questions about automation

What kind of data can you scrape and automate?

Public web data such as stats, prices, catalogues and listings. We collect it on a schedule, clean it and put it where you use it: a dashboard, a database or an Excel file.

Do you only collect data, or also analyse it?

Both. The Whisky Exchange bot analyses the catalogue for low prices with significant orders and for high value, and gives insights on demand. The Champion Insights UI shows pairings built from the scraped data.

What happens when a website changes?

A scraper that reads a page depends on that page's layout. We build checks that tell us when a source stops returning what we expect, so it is fixed before you notice.

Can you build one for my sector?

Yes. Tell us the source, the fields you need and how often you need them. Book a free AI plan call and we will map it out.

Need data from the web, on a schedule?

Book a free call. Tell us the source and the fields and we will show you how to collect them.

Build my project