{
  "id": 4730599,
  "title": "I spent three weeks sourcing 500 perfume bottles by hand. Then I built an agent to do the job.",
  "url": "https://urgent.news/2026/08/31/i-spent-three-weeks-sourcing-500-perfume-bottles-by-hand-then-i-built",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-31T22:09:34.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/jaitramadandij/i-spent-three-weeks-sourcing-500-perfume-bottles-by-hand-then-i-built-an-agent-to-do-the-job-51kn"
  },
  "original_language": "en",
  "account": "I composed this piece to take part in the Google × Devpost **All Things Agentic * hackathon ( https://allthingsagentichackathon.devpost.com/ ). The creation is called SupplyMe. I aimed to obtain 500 units of a 50ml fragrance manufactured in Indonesia within a tight budget. Five hundred units is a modest order, and tiny orders are where the B2B marketplaces become ineffective. Factories I desired were not listed on any of those platforms. The ones that were listed ranked by ad spend, and every figure on each profile was a static field somebody filled out once and never revisited. So, I acquired the task manually. It took three weeks, 41 tabs, and handling three languages. My spreadsheet included a column for minimum order quantity, but nine of its rows were left blank, as most factories seldom publish one. I sent identical eight questions to each supplier individually, receiving answers to four of them. Eventually, two suppliers listed the same major fragrance brand as a client. I reviewed both pages twice. They matched in every aspect that mattered to me: a logo, a sentence, but no date, no contract, and no other party claiming the same. One of those companies was deceitful, and I had no way to discern it. SupplyMe discovers information that is disclosed but not published. A factory divulges its real minimum only during a negotiation and provides a different figure to the subsequent buyer. No dataset captures that figure. You obtain it by asking, and you validate its reliability by finding someone other than the factory stating the same. That constitutes two distinct tasks. The tool I constructed is named SupplyMe. Input a product into it — 500 × 50ml EDP, Indonesia, premium packaging, minimize first-batch risk — and then close the tab. It dissects that product into the supply chain it requires, identifies genuine manufacturers of each component, retrieves information from them, and sends queries to suppliers about answers search engines could not provide. Days later, when a factory responds, it notices discrepancies between the price in the email and the price on the website, forwards both numbers to the supplier in a single follow-up, and ranks the surviving suppliers. The system does not store information in memory for extended periods because a supplier may take up to three days to respond. Every step is a persistent event, allowing the mission to continue even after the process that initiated the email has ended. That is what makes it an agent rather than a conversation: it keeps functioning independently of your presence. The first component I developed is the mechanism that addresses my initial question, and it does not contain any model. Gemini reads a page, extracts claims, and labels each one with its source. A deterministic function converts those sources into a confidence score, employing noisy-OR with geometric decay: CORROBORATION_DECAY, CONFIDENCE_CEILING = 0.55, 0.97 confidence = min ( 1 - math . prod (( 1 - w [ i ] * DECAY ** i ) for i in range ( n )), CEILING ) The weights reflect personal judgments: Source Weight The supplier's email 0.90 The brand's website 0.85 The supplier's website 0.75 A Maps listing 0.55 A directory listing 0.45 A bare search result 0.30 Decay ensures that the second corroborating source contributes less than the first, and the twentieth contributes close to nothing, effectively addressing the marketplace issue I initially addressed. A single rule governed the design: ask a model about its confidence level, and you receive a number that fluctuates as you modify the prompt. Calculate it from source identity, and it changes based on the evolving evidence. Ranking follows the same principle: a weighted sum considering price, minimum-order fit, capability, lead time, evidence strength, and logistics, with proportions of 20/20/20/15/15/10. When tasked with minimizing first-batch risk, the weights shift from price to order-size fit. The entity that generates the recommendation receives a ranking it did not compute, unable to reorder the scores—handing it that authority transforms the scores into mere decorations. Establishing that boundary eliminated the necessity for explainability, as the explanation is the calculation itself. Six of my seven agents did not require the agent structure. Initially, I encompassed everything within an LlmAgent because that is what the framework offers and it felt cumbersome to disregard. Subsequently, I examined the traces. Six of them executed a single call and returned results. One prompt, one schema, and one response sufficed; no branching, no tool selection. The workflow had already predetermined the subsequent steps; the model merely filled in the designated shape. The seventh agent functioned similarly when interacting with a real supplier: it read a page, searched the web for PT Kemasan Wangi Nusantara Indonesia's 50ml glass perfume bottle, and discovered the minimum order quantity to be 500 pcs per desain. It also reported missing price and lead time information, which later prompts the system to email this factory. Therefore, research retained its agent status, integrating search_web, read_page, and query_maps functionalities while converting other six into single structured calls. This approach is more efficient and predictable, albeit at roughly ten times the cost compared to a tool loop acting as a structured call. Determining when to avoid incorporating an agent proved to be the most valuable hour of my development process. The financial implications of running this system are as follows: Measured using the API's token counts, sourcing through eight suppliers to arrive at a comprehensive recommendation costs $0.29, involving 98 model calls and 562,287 input tokens. For twelve suppliers, the cost amounts to $0.78, which is the figure I plan against. Input tokens constitute the majority of the expenditure, as a single supplier's website can span tens of thousands of tokens, and the research agent consumes a significant portion of the budget.",
  "summary": "I wrote this post to enter the Google × Devpost **All Things Agentic * hackathon ( https://allthingsagentichackathon.devpost.com/ ). The project is SupplyMe , submitted in the Taskmaster category* I wanted 500 units of a 50ml fragrance made in Indonesia, on a first-batch budget. Five hundred is a small order, and small orders are where the B2B marketplaces stop being useful to you. The factories…",
  "key_points": [
    "Sourced 500 perfume bottles manually in three weeks",
    "Built agent SupplyMe to automate the process",
    "Agent retrieves info from suppliers, validates reliability"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}