I Built an API for 21,000+ Korean Cosmetic Ingredients — Here’s Why

The Problem Nobody Talks About

If you’ve ever tried to check whether a cosmetic ingredient is legal in South Korea, you know the pain:

  • 🇰🇷 Government websites only in Korean
  • 📄 Data buried in PDFs, not databases
  • 🔍 No search functionality
  • 🚫 No official API

For cosmetic brands trying to enter the Korean market, this means hours of manual research, expensive consultants, or just… guessing.

I decided to fix this.

What I Built

K-Beauty Cosmetic Ingredients API — A REST API with:

  • ✅ 21,796 ingredients from official Korean sources
  • ✅ INCI names, CAS numbers, Korean translations
  • ✅ Regulatory status (Prohibited / Restricted / Not Listed)
  • ✅ Concentration limits and conditions
  • ✅ Fast JSON responses (<50ms)

Data comes directly from:

  • MFDS (Ministry of Food and Drug Safety) — Korea’s FDA
  • KCIA (Korea Cosmetic Industry Association)

Quick Example

Want to check if Retinol is restricted in Korea?

import requests

response = requests.get(
    "https://k-beauty-cosmetic-ingredients.p.rapidapi.com/v1/ingredient/inci",
    params={"q": "retinol"},
    headers={
        "X-RapidAPI-Key": "YOUR_API_KEY",
        "X-RapidAPI-Host": "k-beauty-cosmetic-ingredients.p.rapidapi.com"
    }
)

data = response.json()
print(data)

Response:

{
  "success": true,
  "count": 3,
  "data": [
    {
      "inci_name": "RETINOL",
      "kr_name": "레티놀",
      "cas_numbers": "68-26-8",
      "regulation_status": "Restricted",
      "purposes": "Skin conditioning"
    }
  ]
}

Now you know: Retinol is restricted (allowed with conditions) in Korean cosmetics. No PDF digging required.

Who Is This For?

User Use Case
🧪 Cosmetic Formulators Check ingredients before formulating
📋 Regulatory Consultants Speed up compliance audits
🏭 Manufacturers Validate formulations for Korea export
📱 App Developers Build ingredient scanner apps
🛒 E-commerce Show safety info on product pages

API Endpoints

Endpoint Description
/v1/ingredient/inci?q= Search by INCI name
/v1/ingredient/cas?q= Search by CAS number
/v1/ingredient/kr?q= Search by Korean name
/v1/ingredient/search?q= Partial text search
/v1/ingredient/status?s= Filter by regulatory status
/v1/stats Database statistics

Tech Stack

For those curious about how it’s built:

  • Backend: Python, FastAPI
  • Database: SQLite (read-only mode)
  • Server: Gunicorn + Uvicorn workers
  • Infrastructure: AWS EC2, Docker
  • Monitoring: Telegram alerts
  • Distribution: RapidAPI

Why SQLite?

The data is essentially static (updated monthly). SQLite in read-only mode gives us:

  • Zero configuration
  • Fast reads
  • No separate database server
  • Easy backups

For a read-heavy API with ~22K records, it’s perfect.

Lessons Learned

1. Government Data is Messy

Scraping and normalizing data from multiple sources took 10x longer than building the API itself.

2. B2B > B2C for Niche APIs

Consumer apps want “safety scores.” Businesses want regulatory compliance data. They’re willing to pay for it.

3. Documentation Matters

Good docs = fewer support questions = more time for features.

Try It Free

The API is live on RapidAPI with a free tier (100 requests/month).

🔗 K-Beauty Cosmetic Ingredients API

📂 GitHub – Example Code

What’s Next?

  • [ ] Monthly data updates
  • [ ] More search filters
  • [ ] Batch lookup endpoint
  • [ ] Python/JS SDK packages

Questions?

Drop a comment below or reach out on RapidAPI. Happy to help!

If you’re working on cosmetic tech or regulatory compliance tools, I’d love to hear about your use case.