[portfolio](https://geonwoo.kim/en/portfolio) › deepeet

# Sourcing data

https://geonwoo.kim/en/portfolio/deepeet-sourcing

Period: 2026.07 — 2026.08

Choosing a supplier for each order first required knowing each supplier's products and prices. Collection started with wholesale supplier prices and grew to include Naver search demand, competition metrics and related keywords. These sources feed recommendations for what to sell next among items that can actually be supplied. Notices from supplier group chats are also collected so supply stops and price changes can be acted on.

Combines wholesale supplier prices with search demand and competition to choose what to sell among fruit that can be supplied

Team: Solo

Role: Supplier price collection · Market and keyword analysis · Sourcing recommendations · Browser extension · Supplier notice collection

Python · Playwright · PostgreSQL · MinIO · NumPy · TypeScript · Chrome Extensions

- Collection that reads official supplier spreadsheets first, then APIs and web pages, then keeps the last successful copy
- Supplier price ledger normalized by item, variety, weight, count and grade, keeping the original product names and prices
- Market analysis that stores Naver monthly top keywords, daily trends and a keyword ontology separately
- Sourcing recommendations shown with evidence on supply, demand, competition and timing
- Competitive price watch that extracts representative prices per item and option from popular Toss Shopping products
- A Chrome extension that structures and saves only the Coupang search and product pages a person opened
- Notice collection that preserves supplier KakaoTalk notices and ties return and exchange limits to supplier products and purchase candidate checks

## One bad price row blocking the whole price list

Problem: A single empty value or invalid price in a supplier file caused collection of the entire price list to fail.

Solution: File-level structure checks run separately from row-level isolation, so only valid rows are updated. Bad rows keep the last valid price and observation time. Valid data is never lost, and unchecked prices never look fresh.

## Catalogs that suddenly went empty

Problem: If collection returned an empty or much smaller supplier catalog, it could overwrite the valid price list.

Solution: Empty and sharply shrunken catalogs are treated as partial data, and the last valid copy is kept. A temporary collection glitch does not erase purchase routes.

## Weight and packaging crowding the rankings

Problem: Variants that differed only in weight, packaging or grade filled the top recommendation slots instead of distinct items.

Solution: Weight, packaging and grade were moved down to options rather than item candidates. Seasonality and demand trends are calculated separately.

## Late-rendering reviews and lost observations

Problem: Reviews and ratings rendered later than names and prices, so empty values were saved, and observations that failed to send were lost.

Solution: The extension watches card changes and reads once the page settles. Observations that fail to send stay in an outbox and are sent again. Late-rendering pages are read without endless waiting or scrolling.


[Agent operations and organizational memory](https://geonwoo.kim/en/portfolio/deepeet-agent-ops) · [Development and infrastructure operations](https://geonwoo.kim/en/portfolio/deepeet-infra)
