A blazing-fast, lightweight, and user-friendly tool built with Go for retrieving app information from major app stores.
- ⚡️ Blazingly fast — Lightning-quick app data retrieval powered by Go
- 🛍️ Multi-store support — Fetch data from major app stores in one place
- 🪶 Lightweight — Minimal resource footprint for efficient operation
- 🐳 Containerized — Full Docker support for flexible deployment
- 🔌 Simple API — Clean REST endpoints for seamless integration
- 📝 Structured data — Consistent JSON output for all app stores
- 🛠️ Easy setup — Get started in minutes with straightforward configuration
- Docker and Docker Compose must be installed on your machine.
- Copy code below and save it as
docker-compose.yml
.
services:
browser:
image: chromedp/headless-shell
ports:
- "9222:9222"
command: [
"--no-sandbox",
"--disable-gpu",
"--remote-debugging-address=0.0.0.0",
"--remote-debugging-port=9222",
"--disable-extensions",
"--enable-automation",
"--disable-blink-features=AutomationControlled",
"--incognito",
"--user-agent=Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
]
app:
image: ghcr.io/nightcodezero/katsini:latest
environment:
CHROME_HOST: browser
CHROME_PORT: 9222
ports:
- "8080:8080"
depends_on:
- browser
links:
- browser
- Run
docker-compose up
to start the service.
🎉 That's it! You can now access the service at http://localhost:8080
- URL:
http://localhost:8080/playstore
- Method:
GET
- Query Parameter:
bundleId
(REQUIRED): The app package name (e.g.,com.mediocre.dirac
).lang
(optional, defaults to `'en'): The two letter language code in which to fetch the app page.country
(optional, defaults to 'us'): The two letter country code used to retrieve the applications. Needed when the app is available only in some countries.
curl http://localhost:8080/playstore?bundleId=com.mediocre.dirac&lang=en&country=us
{
"bundleId": "com.mediocre.dirac",
"developer": "Mediocre",
"title": "Beyondium",
"updated": "31-10-2019",
"url": "https://play.google.com/store/apps/details?id=com.mediocre.dirac&hl=en&gl=us",
"version": "1.1.5"
}
- URL:
http://localhost:8080/appstore
- Method:
GET
- Query Parameter:
appId
orbundleId
(REQUIRED):appId
: The unique identifier for the application in the Apple App Store. This can be found in the app's store URL after the/id<APP_ID>
segment.bundleId
: The app package name (e.g.,com.thinkdivergent
).
country
(optional, defaults to 'us'): The two letter country code used to retrieve the applications. Needed when the app is available only in some countries.
curl http://localhost:8080/appstore?appId=1592213654&country=us
{
"appId": "1592213654",
"bundleId": "com.thinkdivergent",
"developer": "Think Divergent LLC",
"title": "Think Divergent",
"updated": "11-02-2023",
"url": "https://apps.apple.com/us/app/think-divergent/id1592213654?uo=4",
"version": "2.0.13"
}
- URL:
http://localhost:8080/appgallery
- Method:
GET
- Query Parameter:
appId
(REQUIRED): The unique identifier for the application in the Huawei AppGallery. This can be found in the app's store URL after the/app/C<APP_ID>
segment.
curl http://localhost:8080/appgallery?appId=100102149
{
"appId": "100102149",
"bundleId": "com.radio.fmradio",
"developer": "RADIOFM",
"title": "Radio FM",
"updated": "05-11-2024",
"url": "https://appgallery.huawei.com/app/C100102149",
"version": "6.5.6"
}
The benchmarks were run using the following command:
go test -bench=. -benchtime=1s -benchmem -cpu=1
The results of the benchmarks are as follows:
goos: linux
goarch: amd64
pkg: github.com/nightcodezero/katsini
cpu: 12th Gen Intel(R) Core(TM) i7-12700
BenchmarkGooglePlayStore 2 811015314 ns/op 3816876 B/op 21807 allocs/op
BenchmarkAppleAppStore 64 18702830 ns/op 95091 B/op 163 allocs/op
BenchmarkHuaweiAppGallery 2 892189872 ns/op 2685124 B/op 15531 allocs/op
The benchmark results show the average time taken and how many iterations were run per operation can be done in a second.
- Note: The benchmarks were run on a 12th Gen Intel(R) Core(TM) i7-12700 CPU and using a single CPU core.
2
: The number of iterations run per operation.ns/op
: The average time taken for each operation.B/op
: The average number of bytes allocated per operation.allocs/op
: The average number of memory allocations per operation.
Here are some of the libraries that are used in this project:
- Chromedp - A faster, simpler way to drive browsers in Go.