<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Journeyhorizon</title>
    <description>The latest articles on DEV Community by Journeyhorizon (@journeyhorizon).</description>
    <link>https://dev.to/journeyhorizon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3536912%2Fd82de92c-5dae-42e2-b04a-bc2fbf12bf98.png</url>
      <title>DEV Community: Journeyhorizon</title>
      <link>https://dev.to/journeyhorizon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/journeyhorizon"/>
    <language>en</language>
    <item>
      <title>Vetting a Flutter Agency for a Marketplace Build: A Technical Interview Script</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Wed, 04 Nov 2026 07:36:38 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/vetting-a-flutter-agency-for-a-marketplace-build-a-technical-interview-script-4p9</link>
      <guid>https://dev.to/journeyhorizon/vetting-a-flutter-agency-for-a-marketplace-build-a-technical-interview-script-4p9</guid>
      <description>&lt;p&gt;Most "best Flutter agency" lists rank companies on three things: hourly rate, review score and portfolio size. Those are fine filters for a brochure app. For a two-sided marketplace they miss almost everything that makes the project hard: split payments, identity checks, real-time messaging and an architecture that survives growth.&lt;/p&gt;

&lt;p&gt;If you're the developer, CTO or technical co-founder asked to vet a Flutter partner, this post gives you a technical interview script instead of a ranking. It's based on the marketplace-specific criteria in &lt;a href="https://www.journeyh.io/blog/best-flutter-app-development-company" rel="noopener noreferrer"&gt;Journeyhorizon's guide to choosing a Flutter app development company for marketplaces&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Flutter is a reasonable default for marketplaces
&lt;/h2&gt;

&lt;p&gt;Before vetting the partner, sanity-check the stack choice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One codebase, three targets.&lt;/strong&gt; iOS, Android and web from a single Dart codebase, with consistent UX for buyers and sellers across devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; For many apps, Flutter is roughly 30–40% more cost-efficient than building separate native apps, with comparable performance. The real saving depends on how many platform-specific features you need, so ask for both estimates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escape hatches.&lt;/strong&gt; When you do need native capabilities, plugins and platform channels give you access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Native still makes sense when the product leans heavily on platform-specific features or performance. For most marketplaces, though, the hard problems sit in the backend and integrations, not the UI layer. That's exactly where generic Flutter shops tend to be weakest.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shortlist checklist
&lt;/h2&gt;

&lt;p&gt;Use this as a first-pass filter before any calls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Live two-sided platforms you can actually download and test&lt;/li&gt;
&lt;li&gt;[ ] Marketplace payments: split payouts, escrow or delayed capture, refunds, multi-currency&lt;/li&gt;
&lt;li&gt;[ ] Trust and safety: identity verification, reviews, moderation, disputes&lt;/li&gt;
&lt;li&gt;[ ] Scalable architecture: backend, search, caching, a plan for 10x traffic&lt;/li&gt;
&lt;li&gt;[ ] Transparent, phased pricing with milestones and market-rate hourly rates&lt;/li&gt;
&lt;li&gt;[ ] Post-launch support: maintenance, app store updates, growth roadmap&lt;/li&gt;
&lt;li&gt;[ ] Commercial thinking: they ask about your business model before your feature list&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyone who fails more than one of these isn't a marketplace partner, regardless of their rating.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical interview: four areas to probe
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Payments are a subsystem, not a plugin
&lt;/h3&gt;

&lt;p&gt;"We've integrated Stripe" is not an answer. Marketplace payments mean multiple payment methods, currency conversion, escrow logic and settlement cycles. Many Flutter shops can build a beautiful checkout UI but have never run marketplace payments at scale.&lt;/p&gt;

&lt;p&gt;Questions to ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Walk me through how funds move from buyer to seller in your last marketplace.
- How did you handle delayed capture and partial refunds?
- Where does commission get calculated, and what happens on a dispute?
- Which payment providers have you integrated in production?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vague answers are a red flag.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Identity and trust
&lt;/h3&gt;

&lt;p&gt;Two-sided platforms live or die on trust. Expect identity APIs, document verification, background checks and third-party trust services. Ask which identity providers they've wired up and how verification state flows into the app (e.g. what a seller can do before and after verification).&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Real-time state across both sides
&lt;/h3&gt;

&lt;p&gt;Buyers, sellers and support all need the same view of the world. That means push notifications, in-app messaging and message queuing. Booking apps are the classic stress test: availability and confirmations must agree on every device, or you get double-bookings.&lt;/p&gt;

&lt;p&gt;Ask: &lt;em&gt;How do you keep availability consistent when two users book the same slot at the same moment?&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Scale from day one, without over-building
&lt;/h3&gt;

&lt;p&gt;You don't need a planet-scale backend at launch, but you do need caching, pagination, search optimization and sane database queries from the start. Otherwise the success case triggers a rewrite. Ask how their last marketplace handled a 10x traffic jump, and what they'd change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business model drives architecture
&lt;/h2&gt;

&lt;p&gt;This is the part engineers sometimes skip, and it's the most important. The monetization model changes your data model and payment flows:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business model&lt;/th&gt;
&lt;th&gt;Architectural consequence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Commission&lt;/td&gt;
&lt;td&gt;Payment splits, payout scheduling, fee reporting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;td&gt;Recurring billing logic, entitlement checks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-region&lt;/td&gt;
&lt;td&gt;Tax rules and regulatory variation per market&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A partner that doesn't ask about this before quoting is estimating the wrong system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading the estimate
&lt;/h2&gt;

&lt;p&gt;Benchmarks from the source for 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Startup MVP&lt;/strong&gt; (auth, profiles, basic listings, notifications, a few integrations): ~$25,000–$50,000&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booking or service marketplace&lt;/strong&gt; (availability, booking, payments, reviews, admin): ~$50,000–$100,000&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex marketplace&lt;/strong&gt; (multiple roles, subscriptions, real-time data, AI or heavy integrations): ~$150,000–$250,000+&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance:&lt;/strong&gt; ~15–20% of the initial build per year&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Timelines: a focused MVP takes about three to four months; a feature-complete marketplace with payments, identity verification and messaging about six to nine months.&lt;/p&gt;

&lt;p&gt;A quote far below these ranges usually means marketplace complexity wasn't priced in, and you'll pay for it later in change requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build vs. platform: don't default to custom
&lt;/h2&gt;

&lt;p&gt;Not every marketplace needs a custom backend. Platforms like Sharetribe already cover payments, seller management, disputes and messaging for common models: service marketplaces, product marketplaces and peer-to-peer rentals. Launch can take weeks instead of months, and a Sharetribe mobile app template starts from $199/month plus a one-time setup fee.&lt;/p&gt;

&lt;p&gt;Custom development earns its cost for unusual models: B2B multi-vendor, heavy compliance, real-time marketplaces, proprietary matching or ranking, or marketplace-as-a-service. A sensible path is hybrid: validate on Sharetribe, add native-feeling mobile apps, then invest in custom code once you've proven product-market fit.&lt;/p&gt;

&lt;p&gt;As a reference point, the Australian fashion marketplace Kifaayat launched iOS and Android apps on Journeyhorizon's Flutter mobile foundation in roughly one to one and a half months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red flags during the sales process
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Leading with visuals and speed while skipping architecture&lt;/li&gt;
&lt;li&gt;Long engagements with no milestones or pause points&lt;/li&gt;
&lt;li&gt;"We'll scale to millions of users" with no talk of databases, caching or infrastructure&lt;/li&gt;
&lt;li&gt;No questions about your business model, users or growth plan&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What good post-launch support looks like
&lt;/h2&gt;

&lt;p&gt;Shipping v1 is the start, not the end. Ask what happens in month two and month twelve. A solid partner should cover ongoing maintenance and bug fixes, performance tuning, OS and app store updates, and new features as the business evolves. For a marketplace specifically, that includes improving the seller experience, payment reconciliation, dispute workflows, and adding new payment methods or regions. Ask, too, whether the codebase is structured so marketplace-specific plugins and integrations can be added later without a rewrite. If the answer is "we'll figure that out after launch," budget for a second vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final test
&lt;/h2&gt;

&lt;p&gt;Ask the agency to walk through their last marketplace project end to end: payments, scalability decisions, onboarding. Strong partners will talk trade-offs and edge cases. Weak ones will show screenshots.&lt;/p&gt;

&lt;p&gt;If you're evaluating partners now, &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; has shipped more than 200 projects since 2018, and its &lt;a href="https://www.journeyh.io/services/flutter-mobile-app-development" rel="noopener noreferrer"&gt;Flutter mobile app development team&lt;/a&gt; focuses specifically on marketplace builds.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>startup</category>
      <category>dart</category>
    </item>
    <item>
      <title>Per-Token Price Is Only Half the Story: Modeling Real LLM API Costs for a Marketplace</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Wed, 04 Nov 2026 07:35:43 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/per-token-price-is-only-half-the-story-modeling-real-llm-api-costs-for-a-marketplace-28o5</link>
      <guid>https://dev.to/journeyhorizon/per-token-price-is-only-half-the-story-modeling-real-llm-api-costs-for-a-marketplace-28o5</guid>
      <description>&lt;p&gt;Every LLM pricing table answers the same question: what does a million tokens cost? It's a useful number, but it's the wrong unit for a marketplace. A marketplace doesn't buy tokens. It runs listings, matches, moderation passes and fraud checks, and each of those calls hides costs that never show up in the headline rate.&lt;/p&gt;

&lt;p&gt;This post treats LLM pricing the way you'd treat any other infrastructure cost: build a model of the workload, find the multipliers, then optimize the parts that actually move the bill. All figures come from the October 2026 pricing comparison published by &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;marketplace development agency Journeyhorizon&lt;/a&gt;, which you can read in full in their &lt;a href="https://www.journeyh.io/blog/llm-api-pricing-comparison-marketplace" rel="noopener noreferrer"&gt;LLM API pricing guide for marketplaces&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Load the price sheet, but read it correctly
&lt;/h2&gt;

&lt;p&gt;Here's the October 2026 snapshot (standard short-context prices per 1M tokens, input / output):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Cached input&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Fable 5.1&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5.5&lt;/td&gt;
&lt;td&gt;$4&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;td&gt;$0.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 5.5 (≤100K)&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-6-astra&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;$1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-6.1-sol&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-6-luna&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$0.01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.1 Pro (≤200K)&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;td&gt;$12&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.8 Flash&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;$3.75&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.1 Flash-Lite&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things jump out when you look at this like an engineer rather than a shopper:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Output is the expensive direction.&lt;/strong&gt; Across providers, output tokens cost four to six times more than input tokens. Your &lt;code&gt;max_tokens&lt;/code&gt; setting is a budget control, not just a UX choice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier spread dwarfs provider spread.&lt;/strong&gt; Budget and flagship tiers differ by 20x to 100x. Comparing Anthropic vs OpenAI vs Google at the same tier barely matters next to choosing &lt;em&gt;which tier&lt;/em&gt; handles each task.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Also note the price sheet has a shelf life. Gemini 4 Argon is scheduled to go from $2/$10 to $4/$20 on December 1, 2026, and Gemini 3.8 Flash from $0.75/$3.75 to $1.50/$7.50 on January 1, 2027. Treat prices as config, not constants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Model the workload, not the request
&lt;/h2&gt;

&lt;p&gt;Take the worked example from the source: a skilled-trades service marketplace.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requests_per_day      = 500
llm_calls_per_request = 3   # intake summary, provider matching, fraud screening
input_tokens/request  = 6,000
output_tokens/request = 1,500

daily:   3,000,000 input  +   750,000 output
monthly: 90,000,000 input + 22,500,000 output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plug that into the price sheet and you get roughly:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;~Monthly cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5 or gpt-6.1-sol&lt;/td&gt;
&lt;td&gt;$405&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.8 Flash&lt;/td&gt;
&lt;td&gt;$150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 5.5 or gpt-6-luna&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Run the premium numbers by hand and you'll notice that output is more than half of the $405 bill, even though there are four times fewer output tokens than input tokens. That's the 5x output multiplier at work.&lt;/p&gt;

&lt;p&gt;Now scale it. At 10,000 requests a day the same workload is about $400/month on a budget model versus about $8,100 on Claude Sonnet 5.5. At 50,000 requests a day it's roughly $2,000 versus $40,500. The gap that looked like a rounding error at launch becomes a line item your CFO asks about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add the multipliers the price sheet doesn't show
&lt;/h2&gt;

&lt;p&gt;This is where most estimates go wrong. Here's a checklist of cost drivers to add to your model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Retries and timeouts.&lt;/strong&gt; Failed calls still burn tokens. If 3% of calls retry, your bill is at least 3% higher than modeled.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Reasoning tokens.&lt;/strong&gt; "Thinking" tokens are billed at the output rate but aren't in the visible response. A 300-token answer can bill several thousand tokens.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Long-context surcharges.&lt;/strong&gt; Gemini 3.1 Pro rises to $4/$18 above 200K tokens; Claude Haiku 5.5 rises fivefold to $0.50/$2.50 above 100K. One oversized context window can quietly reprice a whole feature.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Regional and premium modes.&lt;/strong&gt; US-only inference is billed at 1.1x; Opus 5.5 fast mode at 2x.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Rate limits and fallbacks.&lt;/strong&gt; You'll need backup models and orchestration logic. That infrastructure isn't in any API price.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Traffic shape.&lt;/strong&gt; Marketplaces aren't chatbots. Flash sales, seasonal peaks and viral listings multiply calls overnight.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple way to encode this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;monthly_llm_cost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_cost&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retry_rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reasoning_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                     &lt;span class="n"&gt;region_multiplier&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;peak_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_cost&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;retry_rate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;reasoning_factor&lt;/span&gt; \
                     &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;region_multiplier&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;peak_factor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's crude, but it forces you to put a number on each assumption instead of pretending they're zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Pull the levers that actually move the bill
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prompt caching
&lt;/h3&gt;

&lt;p&gt;Anthropic bills cached reads at 10% of the normal input rate. In the source's example, caching a 1,500-token system prompt on Claude Sonnet 5.5 drops the input bill from about $180 to about $52 a month. Two caveats: cache writes cost 1.25x the input rate, and the default cache lives for five minutes. Caching pays off for hot, repeated prefixes, not for one-off prompts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Batch APIs
&lt;/h3&gt;

&lt;p&gt;OpenAI, Anthropic and Google all offer a 50% discount for queued, non-real-time work, with results within 24 hours. Recommendation refreshes, analytics summaries and non-urgent moderation belong here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model cascading
&lt;/h3&gt;

&lt;p&gt;Route easy work to a budget model (Claude Haiku 5.5, gpt-6-luna, Gemini Flash-Lite) and escalate only hard cases. Sending 70% of traffic to budget and 30% to premium takes the $405 example down to about $135 a month, roughly a two-thirds cut.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize_intake&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;classify_listing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fraud_review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;premium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;budget&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Prompt diet
&lt;/h3&gt;

&lt;p&gt;Trimming redundant instructions and parameterizing content can shrink prompts by 30–50%. But because of the output multiplier, capping response length is usually the single biggest win.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Decide with total cost of ownership
&lt;/h2&gt;

&lt;p&gt;Before you commit to a provider, run through four questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What does a wrong answer cost?&lt;/strong&gt; A bad moderation call damages trust; a bad match hurts satisfaction. That sets your minimum tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's your real volume?&lt;/strong&gt; Prototype, measure a week of real traffic, then extrapolate. Guesses are always low.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's the switching cost?&lt;/strong&gt; A cheap provider with an unstable roadmap can cost more if you have to migrate in a hurry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's the full TCO?&lt;/strong&gt; Infrastructure, fallback logic, error handling and the engineering hours spent optimizing all count.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's no universally cheapest provider. Budget tiers like Claude Haiku 5.5 and gpt-6-luna win on raw rates, and open-weight models such as DeepSeek can be cheaper still, but the right answer depends on your workload. Test two or three before deciding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;The per-token price is an input to your cost model, not the model itself. Capture volume, call count, output ratio, retries, reasoning tokens and traffic spikes, then attack the bill with routing, caching, batching and output caps. Do it before launch, because architecture decided on day one decides whether AI features scale profitably.&lt;/p&gt;

&lt;p&gt;If you want a second pair of eyes on your marketplace's AI spend, Journeyhorizon's &lt;a href="https://www.journeyh.io/services/ai-cost-optimization" rel="noopener noreferrer"&gt;AI cost optimization service&lt;/a&gt; is built for exactly this kind of audit.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>startup</category>
      <category>webdev</category>
    </item>
    <item>
      <title>AI Cost per Transaction: The Unit Economics Formula Every Marketplace Engineer Should Know</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Wed, 04 Nov 2026 02:17:26 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/ai-cost-per-transaction-the-unit-economics-formula-every-marketplace-engineer-should-know-3jcn</link>
      <guid>https://dev.to/journeyhorizon/ai-cost-per-transaction-the-unit-economics-formula-every-marketplace-engineer-should-know-3jcn</guid>
      <description>&lt;p&gt;Engineers are good at measuring latency, error rates and throughput. We are usually much worse at answering a simpler question about the AI features we ship: &lt;em&gt;does this thing make more money than it costs?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On a marketplace, that question has a precise answer, and you can compute it with data you probably already log. This post walks through the math as a small model you can implement, based on the Journeyhorizon guide to &lt;a href="https://www.journeyh.io/blog/ai-unit-economics-marketplace" rel="noopener noreferrer"&gt;AI unit economics for marketplaces&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick the right unit
&lt;/h2&gt;

&lt;p&gt;Unit economics is revenue per unit minus the direct cost of delivering that unit. The mistake most teams make with AI is picking the wrong unit. The monthly model bill is not a unit. A single API call isn't a useful one either.&lt;/p&gt;

&lt;p&gt;For a marketplace, the natural unit is the &lt;strong&gt;completed transaction&lt;/strong&gt;. You compare the commission or fees you earn on one transaction with the AI cost of every session it took to produce that transaction.&lt;/p&gt;

&lt;p&gt;That framing explains why marketplaces differ from SaaS. In SaaS, AI often lowers support costs or improves retention. In a marketplace, AI often decides whether a transaction happens at all: search, matching, trust. And marketplaces fund AI out of the take rate, so you must benchmark AI spend against &lt;strong&gt;net revenue&lt;/strong&gt;, not gross merchandise value.&lt;/p&gt;

&lt;p&gt;The guide cites Andreessen Horowitz's essay "The New Business of AI", which reported many AI companies running gross margins of 50 to 60%, compared with 60 to 80% or more for comparable SaaS, because compute scales with usage. With a 10% take rate, a marketplace has even less room to absorb that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three formulas
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cost_per_action      = input_tokens  * input_price
                     + output_tokens * output_price

ai_cost_per_txn      = cost_per_action * actions_per_completed_txn

ai_share_of_net_rev  = ai_cost_per_txn / (avg_order_value * take_rate)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As a function you can drop into a notebook:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ai_share_of_net_revenue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;in_tok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;out_tok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;in_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;out_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="n"&gt;actions_per_txn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;aov&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;take_rate&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;per_action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;in_tok&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;in_price&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;out_tok&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;out_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1_000_000&lt;/span&gt;
    &lt;span class="n"&gt;per_txn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;per_action&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;actions_per_txn&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;per_txn&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aov&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;take_rate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prices are per million tokens. The October 2026 list prices quoted in the guide (input / output):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Sonnet 5.5: $2 / $10, cached input reads $0.10&lt;/li&gt;
&lt;li&gt;Claude Haiku 5.5: $0.10 / $0.50&lt;/li&gt;
&lt;li&gt;gpt-6.1-sol: $2 / $10&lt;/li&gt;
&lt;li&gt;gpt-6-luna: $0.10 / $0.50&lt;/li&gt;
&lt;li&gt;Gemini 3.8 Flash: $0.75 / $3.75&lt;/li&gt;
&lt;li&gt;Batch APIs: roughly 50% off for non-urgent work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Confirm these on the provider pages before you rely on them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example 1: an AI search assistant
&lt;/h2&gt;

&lt;p&gt;The guide's illustrative services marketplace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Average order value $120, take rate 10% → &lt;strong&gt;$12 net revenue per booking&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Six turns per search session, ~4,000 input and ~300 output tokens per turn&lt;/li&gt;
&lt;li&gt;4% of sessions convert → &lt;strong&gt;25 sessions per booking&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run it through the model:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Per turn&lt;/th&gt;
&lt;th&gt;Per booking&lt;/th&gt;
&lt;th&gt;Share of $12&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mid-tier model ($2 / $10)&lt;/td&gt;
&lt;td&gt;~$0.011&lt;/td&gt;
&lt;td&gt;~$1.65&lt;/td&gt;
&lt;td&gt;~14%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+ caching 3,000 of 4,000 input tokens&lt;/td&gt;
&lt;td&gt;~$0.005&lt;/td&gt;
&lt;td&gt;~$0.80&lt;/td&gt;
&lt;td&gt;~7% (before cache-write charges)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simple turns routed to a $0.10 / $0.50 model&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;under $0.10&lt;/td&gt;
&lt;td&gt;under 1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Same feature: 14% of your take or under 1%. And note the other lever: &lt;strong&gt;doubling the conversion rate halves AI cost per transaction&lt;/strong&gt; without touching the model at all. Product quality and cost efficiency are the same equation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example 2: AI listing descriptions
&lt;/h2&gt;

&lt;p&gt;On the seller side, a description with 1,500 input and 400 output tokens costs about $0.007 on a $2 / $10 model, about $0.0035 through a batch API, and a fraction of a cent on a small model. It runs once per listing instead of once per buyer session, so it is usually easy to justify. Journeyhorizon offers an AI product description generator for Sharetribe for exactly this use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Costs your token math will miss
&lt;/h2&gt;

&lt;p&gt;The model bill is only part of the fully loaded cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval and embeddings&lt;/strong&gt; scale with catalog size, not just traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data preparation&lt;/strong&gt;: cleaning, normalizing categories, labeling and pipeline maintenance, often needing dedicated engineering time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring and evaluation&lt;/strong&gt;: quality drifts as sellers and buyer preferences change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallbacks and human review&lt;/strong&gt;: review queues, dispute escalation, support time for wrong outputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power users&lt;/strong&gt;: a small group of heavy users can drive a large share of cost, so track cost per active user by tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Three levers to pull
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lever 1: lower cost per action
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Route classification, tagging and short answers to small models.&lt;/li&gt;
&lt;li&gt;Cache system prompts and category data.&lt;/li&gt;
&lt;li&gt;Use batch APIs for listing enrichment and nightly re-ranking.&lt;/li&gt;
&lt;li&gt;Trim prompts and cap output.&lt;/li&gt;
&lt;li&gt;For self-hosted models, consider quantization and right-sized GPUs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lever 2: raise revenue per AI-driven action
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A/B test against a non-AI baseline so you measure incremental lift, not total conversions.&lt;/li&gt;
&lt;li&gt;Feed in marketplace signals: seller ratings, response times, past buyer behavior.&lt;/li&gt;
&lt;li&gt;Better matching raises conversion, which directly lowers AI cost per transaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lever 3: scope AI to where value is
&lt;/h3&gt;

&lt;p&gt;Prioritize search ranking, buyer-seller matching, fraud checks on larger transactions and listing quality. Use rules for low-value interactions. Broad "AI everywhere" deployments tend to grow cost with little measurable return.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build the model in six steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;List every AI feature and define its unit (search session, generated listing, fraud check).&lt;/li&gt;
&lt;li&gt;Pull 30 days of usage: actions, tokens per action, model used.&lt;/li&gt;
&lt;li&gt;Compute fully loaded cost per action, including retrieval, infrastructure and human review.&lt;/li&gt;
&lt;li&gt;Estimate actions per completed transaction and convert to AI cost per transaction.&lt;/li&gt;
&lt;li&gt;Compare with net revenue per transaction (&lt;code&gt;aov * take_rate&lt;/code&gt;) and your measured A/B lift.&lt;/li&gt;
&lt;li&gt;Break it out by segment and usage tier to find unprofitable pockets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then stress-test it. What if lift is 2% instead of 5%? What if a provider raises prices or retires the model you depend on? Build buffers in. Review monthly while a feature is new and quarterly once it's stable. When predicted and observed results diverge, it often means the AI is solving the wrong problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build, buy or partner?
&lt;/h2&gt;

&lt;p&gt;The guide's illustrative case: 100,000 transactions per month, $80 average order value, 12% take rate, which gives $960,000 monthly net revenue. Allocate 3% to AI and you have about $28,800 a month. At that volume, buying a third-party API or plugin is the clear choice. At ten times the volume, the same 3% funds a dedicated team, and a custom system with even a small conversion lift can justify itself.&lt;/p&gt;

&lt;p&gt;A middle path is bringing in specialists for an architecture review, so model, routing and data decisions are made before they harden into code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common traps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Shipping AI because competitors have it, with no financial measurement.&lt;/li&gt;
&lt;li&gt;Treating data and quality work as a one-time cost.&lt;/li&gt;
&lt;li&gt;Over-optimizing quality: a frontier model that costs many times more for gains that don't move conversion, retention or savings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The safer path is to start with one use case in a high-traffic flow, measure revenue impact against cost, and scale only while the ratio holds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Put AI cost per transaction next to take-rate revenue in the same dashboard and you'll make better product calls almost automatically. If you want help designing that model or the architecture behind it, &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; offers &lt;a href="https://www.journeyh.io/services/ai-strategy-architecture" rel="noopener noreferrer"&gt;AI strategy and architecture&lt;/a&gt; for marketplace teams.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>startup</category>
      <category>python</category>
    </item>
    <item>
      <title>Your LLM Invoice Has No Stack Trace: Building Cost Observability Into a Marketplace</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Wed, 04 Nov 2026 02:16:35 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/your-llm-invoice-has-no-stack-trace-building-cost-observability-into-a-marketplace-1mcb</link>
      <guid>https://dev.to/journeyhorizon/your-llm-invoice-has-no-stack-trace-building-cost-observability-into-a-marketplace-1mcb</guid>
      <description>&lt;p&gt;Here is a pattern that shows up in almost every marketplace that adds AI features. Week one, the feature launches. Week four, usage is up and everyone is happy. Week five, the provider invoice lands at roughly double what anyone projected, and the only explanation available is a single number on a billing dashboard.&lt;/p&gt;

&lt;p&gt;That dashboard tells you &lt;em&gt;how much&lt;/em&gt; you spent. It does not tell you &lt;em&gt;why&lt;/em&gt;: which feature, which tenant, which workflow, or which retry loop burned through the budget. For that you need cost monitoring built into your own stack, the same way you built logging and APM into it.&lt;/p&gt;

&lt;p&gt;This post is a practical guide to wiring that up, based on the Journeyhorizon article on &lt;a href="https://www.journeyh.io/blog/llm-cost-monitoring" rel="noopener noreferrer"&gt;LLM cost monitoring for marketplaces&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "LLM cost monitoring" actually means
&lt;/h2&gt;

&lt;p&gt;It's the continuous measurement, attribution and optimization of spend from model API calls in production. Providers bill per token, with separate input and output prices and a different rate card for each model. So the cost of any call comes down to three things you control: the model, the tokens you send, and the tokens you get back.&lt;/p&gt;

&lt;p&gt;Observability vendors already compute this. As the source article describes, Datadog multiplies the token counts on each LLM span by public prices (with an option for negotiated rates), splits input into non-cached, cache-read and cache-write buckets, and treats reasoning tokens as a subset of output. That breakdown matters because cached input is usually billed at a fraction of normal rates, while reasoning tokens can inflate output quietly.&lt;/p&gt;

&lt;p&gt;Granularity is the whole point. A retrieval pipeline that loads full product listings can use many times the tokens of a simple search. An agent retrying a failed tool call can burn budget in minutes. A bulk import running on a frontier model where a small one would do wastes money without anyone noticing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why marketplace AI costs are hard to forecast
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Two sides, many models
&lt;/h3&gt;

&lt;p&gt;Seller tools (listing enrichment), buyer features (search, recommendations) and platform features (moderation, support) often run on different models. The price spread is large: as of October 2026, Claude Sonnet 5.5 and gpt-6.1-sol list at $2 input / $10 output per million tokens, while Claude Haiku 5.5 and gpt-6-luna list at $0.10 / $0.50. That's a 20x difference for the same token volume.&lt;/p&gt;

&lt;h3&gt;
  
  
  Event-driven traffic
&lt;/h3&gt;

&lt;p&gt;A seller onboarding push can trigger thousands of enrichment calls in one day. A marketing campaign can multiply search volume overnight. Your cost curve follows your growth curve, spikes included.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents multiply calls
&lt;/h3&gt;

&lt;p&gt;One user request can fan out into retrieval, routing, tool calls, retries and guardrail checks. The article cites a Gartner prediction from August 2026 that inference cost per agentic workflow will rise more than fivefold through 2028, even as per-token prices fall.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hidden line items
&lt;/h3&gt;

&lt;p&gt;Embeddings, re-ranking, vector database queries and timeout retries all add up. A feature that looks cheap in staging can be unaffordable under production load. That's why cost visibility belongs in the build phase, not the post-mortem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The metrics to track
&lt;/h2&gt;

&lt;p&gt;Start with this list and resist adding vanity metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tokens per request&lt;/strong&gt; (mean and p95)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost per marketplace operation&lt;/strong&gt;: one listing enrichment, one search, one support reply, one moderation check&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost per user, tenant and market side&lt;/strong&gt; for showback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output-to-input token ratio&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cache hit rate&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Share of traffic on premium models&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Budget burn rate and anomalies&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality score alongside cost&lt;/strong&gt;, so a cost cut can't silently degrade results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cost per operation is the bridge to the business model. If enriching a listing costs more than the commission that listing typically earns in its first month, the feature needs a cheaper model or a different trigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: listing enrichment
&lt;/h2&gt;

&lt;p&gt;Assume about 1,500 input tokens and 300 output tokens per enrichment call at October 2026 list prices.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Cost per listing&lt;/th&gt;
&lt;th&gt;100,000 listings / month&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;~$0.006&lt;/td&gt;
&lt;td&gt;~$600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 5.5&lt;/td&gt;
&lt;td&gt;~$0.0003&lt;/td&gt;
&lt;td&gt;~$30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Either, via batch API (50% off)&lt;/td&gt;
&lt;td&gt;half of the above&lt;/td&gt;
&lt;td&gt;~$300 / ~$15&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Same feature, same volume, an order-of-magnitude difference driven purely by model choice and processing mode. You can only make that call if you can see the numbers per operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the foundation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. One path for all inference traffic
&lt;/h3&gt;

&lt;p&gt;Route every LLM call through a single gateway or a shared client library. Tag every request consistently from day one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;claude-haiku-5.5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;feature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;listing_enrichment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;tenantId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// the wrapper logs input/output/cached tokens and computed cost&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implementation options include plain middleware logging, OpenTelemetry spans shipped to Grafana or Datadog, or AI gateways and observability tools such as Helicone, Portkey, LiteLLM, Langfuse and Comet Opik.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Governance that fires before the invoice
&lt;/h3&gt;

&lt;p&gt;Set daily or monthly quotas per user, feature, tenant or environment. The article suggests a simple alert ladder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;alerts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;budget_warning&lt;/span&gt;
    &lt;span class="na"&gt;threshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;80%&lt;/span&gt;      &lt;span class="c1"&gt;# notify&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;budget_critical&lt;/span&gt;
    &lt;span class="na"&gt;threshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;100%&lt;/span&gt;     &lt;span class="c1"&gt;# critical alert, optional throttling&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;spend_anomaly&lt;/span&gt;
    &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hourly_spend &amp;gt; N x normal_hourly_rate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add per-user rate limits on expensive features. Decide whether a cap hard-blocks requests or posts to a channel like Slack for a human decision. Either is fine. A report that arrives after the invoice is not.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. A continuous optimization loop
&lt;/h3&gt;

&lt;p&gt;Find the largest cost drivers, reduce them without hurting quality, repeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimization levers, in rough order of payoff
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model routing.&lt;/strong&gt; Send classification, tagging and short summaries to small models. Keep frontier models for complex reasoning. Gartner recommends multimodel tiering, and mid-tier options like Gemini 3.8 Flash ($0.75 / $3.75 per million) sit in between.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt caching.&lt;/strong&gt; Keep stable content such as system instructions, taxonomies and policy text at the start of the prompt. Cached reads on Sonnet 5.5 are $0.10 per million tokens versus $2 for regular input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic caching.&lt;/strong&gt; Reuse responses for near-identical queries like popular searches or common support questions, and track the hit rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch processing.&lt;/strong&gt; Move bulk imports, re-categorization and nightly enrichment to batch APIs for 50% off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lean prompts and structured outputs.&lt;/strong&gt; Trim instructions, limit history and use schemas to cut both tokens and retries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent loop limits.&lt;/strong&gt; Cap tool calls and retries per request, and log every time the cap is hit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting at stable volume.&lt;/strong&gt; Open-weight models can undercut API rates at high, predictable usage, once you account for GPUs, engineering and maintenance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're using off-the-shelf components, such as an AI search box for Sharetribe, tag their calls separately so you can measure cost per session and per converted buyer.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 30-day rollout plan
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Week 1:&lt;/strong&gt; Wrap every LLM call in a shared client that logs tokens, model, cost, feature and user or tenant ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 1:&lt;/strong&gt; Reconcile your logged totals against the provider invoice to validate your pricing table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 2:&lt;/strong&gt; Build a dashboard with total spend, spend by feature and model, and cost per operation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 2:&lt;/strong&gt; Configure budget warnings, hard caps and an anomaly alert.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 3:&lt;/strong&gt; Rank features by cost and pick the top three to five drivers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weeks 3–4:&lt;/strong&gt; Test one change per driver (cheaper model, shorter prompt, caching or batching), measuring cost and quality together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 4:&lt;/strong&gt; Ship what holds quality, revert the rest, and schedule a monthly review.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A note on expectations
&lt;/h2&gt;

&lt;p&gt;Monitoring by itself saves nothing. What it does is make savings visible and safe. The article notes that moving a high-volume task to a small model can cut its cost by more than 90% at current list prices, and batch APIs halve eligible jobs, but you only find those opportunities once every call is attributed.&lt;/p&gt;

&lt;p&gt;Review alerts continuously, dashboards weekly during launches or fast growth, and at least monthly once things are stable or whenever a provider changes pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Treat AI cost like latency: a first-class metric, instrumented from the first sprint and reviewed in technical design. If you'd like help setting that up, &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; runs &lt;a href="https://www.journeyh.io/services/ai-cost-optimization" rel="noopener noreferrer"&gt;AI cost optimization engagements&lt;/a&gt; that cover instrumentation, benchmarking and reducing spend for marketplace teams.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>observability</category>
      <category>devops</category>
    </item>
    <item>
      <title>Your AI Feature Is Burning Tokens: A Profiling Checklist for Marketplace Developers</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Wed, 04 Nov 2026 02:15:37 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/your-ai-feature-is-burning-tokens-a-profiling-checklist-for-marketplace-developers-4oic</link>
      <guid>https://dev.to/journeyhorizon/your-ai-feature-is-burning-tokens-a-profiling-checklist-for-marketplace-developers-4oic</guid>
      <description>&lt;p&gt;If you have shipped an AI feature on a marketplace, you have probably had this moment: the feature works, users like it, and then the provider invoice arrives looking like it belongs to a much bigger company. Smart search, generated listing descriptions, review summaries and inquiry routing all quietly spend tokens on every request, and marketplace traffic is spiky by nature. A good week for growth becomes a bad week for the AI budget.&lt;/p&gt;

&lt;p&gt;The encouraging part is that token waste is rarely spread evenly. It usually hides in a handful of call sites, and the fixes are well known. This post treats token usage the way you would treat a slow endpoint: profile it, find the hot path, then fix the expensive parts in order of impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, understand what you are actually paying for
&lt;/h2&gt;

&lt;p&gt;Every LLM call is billed in two directions. &lt;strong&gt;Input tokens&lt;/strong&gt; are everything you send: system prompt, instructions, retrieved listings, chat history, tool definitions. &lt;strong&gt;Output tokens&lt;/strong&gt; are everything the model writes back.&lt;/p&gt;

&lt;p&gt;According to the October 2026 list prices quoted in the original Journeyhorizon guide on &lt;a href="https://www.journeyh.io/blog/how-to-reduce-token-usage" rel="noopener noreferrer"&gt;reducing token usage for AI marketplace features&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input / 1M tokens&lt;/th&gt;
&lt;th&gt;Output / 1M tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5, gpt-6.1-sol&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 5.5, gpt-6-luna&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gemini 3.8 Flash is also listed in the guide at $0.75 and $3.75 per million. Always confirm current prices on the provider pages before you commit to a budget.&lt;/p&gt;

&lt;p&gt;Three details catch teams off guard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Output is roughly 5x the price of input&lt;/strong&gt; on these models, so a verbose response costs more than a long prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning tokens bill as output.&lt;/strong&gt; If a model thinks for 2,000 tokens and answers in 100, you pay for 2,100 output tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The gap between tiers is about 20x.&lt;/strong&gt; A frontier model can cost around twenty times more per token than the small model from the same provider.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Instrument before you optimize
&lt;/h2&gt;

&lt;p&gt;You cannot reduce what you cannot see. Wrap every model call in a shared client that logs, at minimum:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"feature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"seller_review_summary"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"claude-sonnet-5.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4012&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;288&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cache_read_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cache_write_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lst_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"usr_456"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With that data you can answer the three questions that matter:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which features consume the most tokens per day?&lt;/li&gt;
&lt;li&gt;What are the average and p95 token counts per request?&lt;/li&gt;
&lt;li&gt;What is the cache hit rate?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then treat tokens like a performance budget. Give each operation a ceiling and fail the release check, or at least fire an alert, when a change pushes it over.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Fix the architecture, not just the prompt
&lt;/h2&gt;

&lt;p&gt;Most big wins come from deciding what reaches the model at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Send only the context the model needs
&lt;/h3&gt;

&lt;p&gt;Raw listing pages are full of HTML, boilerplate and duplicated fields. Pre-compute a compact summary for each listing and store it. Use retrieval to pick the top candidates first, then send only those. Strip markup before it ever reaches the prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't call an LLM for a database query
&lt;/h3&gt;

&lt;p&gt;Sorting by price or distance is a &lt;code&gt;SELECT&lt;/code&gt; with an &lt;code&gt;ORDER BY&lt;/code&gt;. Keyword and semantic retrieval belong in a search index or vector store. Keep the LLM for the final re-ranking step or for genuinely vague queries such as "something cosy for a rainy weekend".&lt;/p&gt;

&lt;h3&gt;
  
  
  Route by difficulty
&lt;/h3&gt;

&lt;p&gt;Classification, tagging, short extraction and moderation pre-screening are perfect jobs for small models. Reserve frontier models for complex reasoning, long-form writing or sensitive decisions. The guide points to research results here: RouteLLM reported more than 2x cost cuts in some settings, and FrugalGPT reported up to 98% reduction on its test sets. Your mileage will vary, but the direction is clear.&lt;/p&gt;

&lt;p&gt;A simple cascade looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listing&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;small_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;is_valid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;frontier_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# escalate only failures
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just remember to count retries and escalations in your cost math, or the cascade can look cheaper on paper than it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Tighten the prompts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cut filler and repeated instructions.&lt;/strong&gt; Every sentence you send is billed on every call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use one or two short examples&lt;/strong&gt;, and put them in the cached part of the prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constrain the output.&lt;/strong&gt; Ask for JSON, set word limits and always set a hard &lt;code&gt;max_tokens&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use the lowest reasoning effort&lt;/strong&gt; that still meets your quality bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template your prompts&lt;/strong&gt; with placeholders so you can A/B test them consistently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For messy inputs you can also try prompt compression. Microsoft Research's LLMLingua reported up to 20x compression with little performance loss in its experiments, but apply it only after you have removed context you didn't need in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Cache and batch aggressively
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Provider prompt caching
&lt;/h3&gt;

&lt;p&gt;Both major providers discount repeated prompt prefixes. Per the guide, on Anthropic a cache write costs 1.25x base input with a default five-minute lifetime refreshed on use, and a cache read on Sonnet 5.5 is 0.05x base input, about $0.10 per million tokens; the minimum cacheable length on the 5.5 models is 512 tokens. On OpenAI, caching is automatic for supported models once prompts reach 1,024 tokens on GPT-5.6 and later, with reads at 0.1x the uncached rate (0.05x for gpt-6.1-sol).&lt;/p&gt;

&lt;p&gt;The rule that makes caching work: &lt;strong&gt;stable prefix first, dynamic content last.&lt;/strong&gt; System prompt, taxonomy and examples go at the top and never change. The user query, listing data and timestamps go at the bottom. One stray timestamp at the top of the prompt will break every cache hit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Application-level caching
&lt;/h3&gt;

&lt;p&gt;Generated descriptions, review summaries and tags should be stored and regenerated only when their source data changes. Frequent identical queries can be answered from your own cache.&lt;/p&gt;

&lt;h3&gt;
  
  
  Batch APIs
&lt;/h3&gt;

&lt;p&gt;Anthropic, OpenAI and Google all offer asynchronous batch processing, usually completed within 24 hours, at a 50% discount, and it can stack with prompt caching. Nightly description generation, catalog re-tagging, moderation backlogs and review summaries are ideal candidates. Packing many items into one prompt can save further on repeated instructions, but it hurts error isolation and can lower quality, so test the pack size against accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Keep conversations and agents on a diet
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep only recent turns verbatim and summarize older ones.&lt;/li&gt;
&lt;li&gt;Drop tool results once they have been used.&lt;/li&gt;
&lt;li&gt;Load only the tool definitions the current task needs.&lt;/li&gt;
&lt;li&gt;Cap turns and total tokens per task so an agent can't loop forever.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A worked example: seller review summaries
&lt;/h2&gt;

&lt;p&gt;The guide walks through an illustrative case using October 2026 list prices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naive version:&lt;/strong&gt; 10,000 seller profile views per day. Each view sends about 4,000 input tokens to Sonnet 5.5 and gets a 300-token summary back. That's 40M input tokens ($80) plus 3M output tokens ($30), roughly &lt;strong&gt;$110 per day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimized version:&lt;/strong&gt; Generate summaries once and refresh only sellers who received new reviews. With about 2,000 changed sellers per day, a nightly batch uses 8M input and 0.6M output tokens. With the 50% batch discount that comes to about &lt;strong&gt;$11 per day&lt;/strong&gt;, and on Haiku 5.5 about &lt;strong&gt;$0.55 per day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The trade-off is that summaries refresh daily instead of instantly, which is acceptable for most marketplaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to bother
&lt;/h2&gt;

&lt;p&gt;Optimize when the feature is core, heavily used, margins are thin or users are price-sensitive. Hold off when the feature is experimental or low-traffic: ship something simple, measure it, then optimize. Off-the-shelf options such as an AI search box or AI description generator plugin for Sharetribe are a cheap way to validate demand before a custom build.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Token counts logged per request, feature and model&lt;/li&gt;
&lt;li&gt;[ ] Context trimmed to required fields and top candidates&lt;/li&gt;
&lt;li&gt;[ ] Stable prompt prefix first, dynamic content last&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;max_tokens&lt;/code&gt; and output format set on every call&lt;/li&gt;
&lt;li&gt;[ ] Small models for simple tasks, with escalation rules&lt;/li&gt;
&lt;li&gt;[ ] Batch APIs for anything non-urgent&lt;/li&gt;
&lt;li&gt;[ ] Generated content stored and refreshed only on change&lt;/li&gt;
&lt;li&gt;[ ] Conversation history summarized, agent loops capped&lt;/li&gt;
&lt;li&gt;[ ] Quality measured alongside cost after every change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last item matters most. Caching and batching don't change outputs, but smaller models and compression can, so run every change against a fixed evaluation set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Token reduction isn't a one-off cleanup; it's ongoing design work, just like query performance. If you want a second pair of eyes on your AI architecture, the team at &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; offers &lt;a href="https://www.journeyh.io/services/ai-cost-optimization" rel="noopener noreferrer"&gt;AI cost optimization&lt;/a&gt; for marketplaces, from instrumentation to routing and caching strategy.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Every Dashboard Is Green and Growth Is Flat: Debugging the Fractional CMO vs Agency Decision for Marketplaces</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Mon, 02 Nov 2026 05:05:34 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/every-dashboard-is-green-and-growth-is-flat-debugging-the-fractional-cmo-vs-agency-decision-for-3nga</link>
      <guid>https://dev.to/journeyhorizon/every-dashboard-is-green-and-growth-is-flat-debugging-the-fractional-cmo-vs-agency-decision-for-3nga</guid>
      <description>&lt;p&gt;If you have ever debugged a production system where every service reports "healthy" while users still cannot complete checkout, you already understand the most common growth problem in two-sided marketplaces. The agency dashboard is green. Impressions are up, click-through rates look fine, cost per lead is trending down. And yet seller activation is flat, buyers are not coming back, and liquidity in your core categories has not moved.&lt;/p&gt;

&lt;p&gt;That is not an execution bug. It is a missing owner for the system as a whole. This post treats the classic founder question, "should we hire a fractional CMO or a marketing agency?", the way an engineering team would treat an architecture decision: define the roles, look at the interfaces between them, find the real bottleneck, and only then pick the component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two different components with two different contracts
&lt;/h2&gt;

&lt;p&gt;The cleanest way to think about the choice is to compare what each option is actually responsible for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An agency is an execution service.&lt;/strong&gt; It works inside a defined scope and is measured on outputs: impressions, CTR, cost per lead, articles shipped, campaigns launched. It takes a brief and returns deliverables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A fractional CMO is a part-time owner of the marketing system.&lt;/strong&gt; They work like a member of the leadership team, a set number of hours or days each month. They own positioning, map the customer journey on both sides of the marketplace, align budget with growth goals, and are judged on commercial outcomes.&lt;/p&gt;

&lt;p&gt;In interface terms, it looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fractional CMO
  input:  business goals, product roadmap, unit economics, buyer + seller segments
  output: positioning, channel choices, budget allocation, briefs, KPIs
  scored on: seller conversion &amp;amp; activation, buyer retention cohorts,
             customer lifetime value, marketing's share of GMV

Agency
  input:  a brief
  output: campaigns, content, ads, SEO work within scope
  scored on: impressions, CTR, cost per lead, deliverables shipped
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the dependency. The agency's input is a brief, and somebody has to write it. If nobody on your team can produce a good brief, the agency is effectively running without a spec.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-side comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Fractional CMO&lt;/th&gt;
&lt;th&gt;Agency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary role&lt;/td&gt;
&lt;td&gt;Sets direction, priorities and budget&lt;/td&gt;
&lt;td&gt;Produces and runs campaigns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accountability&lt;/td&gt;
&lt;td&gt;Business outcomes&lt;/td&gt;
&lt;td&gt;Deliverables within scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where they sit&lt;/td&gt;
&lt;td&gt;Leadership meetings, across product, sales, ops&lt;/td&gt;
&lt;td&gt;Works from briefs, reports to its manager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time model&lt;/td&gt;
&lt;td&gt;Fixed hours or days per month&lt;/td&gt;
&lt;td&gt;Team sized to retainer or project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breadth&lt;/td&gt;
&lt;td&gt;All channels, strategically&lt;/td&gt;
&lt;td&gt;Usually strongest in one or two&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure mode&lt;/td&gt;
&lt;td&gt;Plans nobody ships&lt;/td&gt;
&lt;td&gt;Polished work aimed at the wrong goal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both failure modes are real. A strategist without execution support is a design doc that never becomes code. An executor without strategy is a well-tested feature nobody asked for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why agency-only setups stall in marketplaces
&lt;/h2&gt;

&lt;p&gt;Founders often hire an agency first because it produces visible activity fast: traffic, content, seller campaigns. The pattern that follows is predictable. The agency is busy, the reports look healthy, and the marketplace still does not scale.&lt;/p&gt;

&lt;p&gt;The root cause is usually not poor execution. It is strategic misalignment. In a two-sided marketplace, positioning tends to be the real lever, and the questions that matter are not channel questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How should we pitch the platform to sellers?&lt;/li&gt;
&lt;li&gt;What advantage do we have over the alternatives they already use?&lt;/li&gt;
&lt;li&gt;How do we frame our value if we are not the biggest or the cheapest?&lt;/li&gt;
&lt;li&gt;What content actually persuades a new seller category to join?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answering those requires context an outside channel team rarely has: the product roadmap, unit economics, and a clear view of buyer and seller segments. Agencies are generally not structured to embed that deeply into leadership.&lt;/p&gt;

&lt;p&gt;There is also a coordination problem that will feel familiar to anyone who has watched one service overload another. A strong content push can flood seller onboarding with more inquiries than the team can handle. An agency managing one channel will rarely see that downstream bottleneck. Someone sitting across marketing, product and operations will.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the fractional CMO actually adds
&lt;/h2&gt;

&lt;p&gt;Think of these as the capabilities missing from an agency-only stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Positioning for both sides.&lt;/strong&gt; Distinct but consistent value propositions for buyers and for sellers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measurement that matches the business.&lt;/strong&gt; Attribution tied to seller cohorts, liquidity by category and repeat purchase rate, rather than leads alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagnosis.&lt;/strong&gt; Working out whether the constraint is seller onboarding, buyer retention, network effects or category expansion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partner management.&lt;/strong&gt; Writing briefs, selecting agencies and holding them to outcomes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capability building.&lt;/strong&gt; Mentoring the team and documenting playbooks so knowledge survives the engagement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One more capability deserves its own line for technical teams: a fractional CMO with marketplace experience can recognise when marketing is being asked to compensate for a product gap, such as missing payments, reviews or dispute resolution, and escalate it instead of throwing campaigns at it. That is the marketing equivalent of refusing to paper over a bug with retries.&lt;/p&gt;

&lt;p&gt;Engagements typically run six to twelve months and often end with a permanent hire or a handoff to an internal team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where product and marketing share a codebase
&lt;/h2&gt;

&lt;p&gt;In a marketplace, the roadmap and the growth plan are tightly coupled. Launching a new seller category can require dedicated landing pages, new filters or a different onboarding flow, while marketing builds awareness and operations prepares support. If those three workstreams are not sequenced, you ship a campaign that points to a half-built flow.&lt;/p&gt;

&lt;p&gt;Agencies rarely connect those dots. A fractional CMO can, including how custom development, AI-powered matching or new integrations change the growth story. On Sharetribe-based platforms in particular, a leader who understands what the platform can and cannot do out of the box will set far more realistic launch plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs (typical ranges, not quotes)
&lt;/h2&gt;

&lt;p&gt;Prices depend on experience, scope, team structure and time commitment, so treat these as reference points from the original article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fractional CMO:&lt;/strong&gt; Fractional Pulse, which tracks employer-posted fractional roles, puts typical retainers at $5,000 to $20,000 per month for roughly 15 to 30 hours, or about $200 to $450 per hour. Its sample is small (36 qualified CMO listings from late 2025 to mid 2026), and very early-stage companies buying only a few hours may fall outside that band.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-time comparison:&lt;/strong&gt; Glassdoor lists average total pay for a full-time US CMO at about $307,000 per year, before benefits, equity and recruiting. That gap is why many pre-Series B marketplaces start with fractional leadership.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agencies:&lt;/strong&gt; Clutch reports most digital marketing agencies on its platform charge $25 to $49 per hour, with specialised SEO, PPC and content work often at $100 to $149 per hour. Most projects reviewed there land between $10,000 and $49,999. Agency fees almost never include ad spend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you compare quotes, normalise them like you would compare cloud plans: hours, deliverables, team seniority and reporting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The recommended architecture: one owner, focused executors
&lt;/h2&gt;

&lt;p&gt;For most scaling marketplaces the answer is not either/or. It is a fractional CMO who owns strategy, positioning, channel selection and briefs, plus one or two focused agencies that execute. A typical setup might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a content team for seller education,&lt;/li&gt;
&lt;li&gt;an SEO specialist for category and listing pages (organic search is often the highest-leverage channel for marketplaces with large inventories),&lt;/li&gt;
&lt;li&gt;a paid media partner for buyer acquisition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This avoids two failure modes: &lt;strong&gt;strategy drift&lt;/strong&gt;, where each agency optimises its own channel, and &lt;strong&gt;under-execution&lt;/strong&gt;, where the strategy is clear but nobody has the bandwidth to ship it. Some founders use a hybrid of in-house owners and outside specialists, or a fractional team that bundles senior strategy and execution in one contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  A decision checklist you can run in a meeting
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Do we have a written go-to-market strategy leadership agrees on?
      no  -&amp;gt; start with strategic leadership
[ ] Are marketing metrics rising while marketplace metrics stay flat?
      yes -&amp;gt; misalignment; an agency alone won't fix it
[ ] Can anyone on our team brief and manage an agency?
      no  -&amp;gt; we need an embedded leader
[ ] Is there one proven channel we simply need to scale?
      yes -&amp;gt; a specialist agency may be faster and cheaper
[ ] Can we only fund one option?
      yes -&amp;gt; pick whatever addresses the biggest constraint
             (for early marketplaces, usually strategy)
[ ] Are we building an in-house team?
      yes -&amp;gt; a fractional CMO can design the structure and hire the first roles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few quick clarifications that come up every time: a fractional CMO usually does not replace an agency, because someone still has to produce the work; they can work with your existing agency and often improve results by tightening briefs and resetting KPIs; and unlike a consultant, who advises and leaves, a fractional CMO owns outcomes and stays through execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Before you add more execution capacity, find the constraint. For most marketplaces moving from product-market fit to sustainable growth, the constraint is strategy and integration, not output volume. Once that is clear, agencies scale execution faster than building everything in-house.&lt;/p&gt;

&lt;p&gt;The full comparison, including the FAQ, is in the original guide on &lt;a href="https://www.journeyh.io/blog/fractional-cmo-vs-agency-marketplace" rel="noopener noreferrer"&gt;fractional CMO vs agency for marketplace growth&lt;/a&gt;. If you want a team that connects marketplace engineering with growth, &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; offers &lt;a href="https://www.journeyh.io/services/digital-marketing" rel="noopener noreferrer"&gt;digital marketing for marketplaces&lt;/a&gt; alongside its development work.&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>startup</category>
      <category>marketplace</category>
      <category>growth</category>
    </item>
    <item>
      <title>Freelancer or Agency? Choosing a Content Model for Your Marketplace Like You'd Choose a Dependency</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Mon, 02 Nov 2026 02:13:08 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/freelancer-or-agency-choosing-a-content-model-for-your-marketplace-like-youd-choose-a-dependency-9nc</link>
      <guid>https://dev.to/journeyhorizon/freelancer-or-agency-choosing-a-content-model-for-your-marketplace-like-youd-choose-a-dependency-9nc</guid>
      <description>&lt;p&gt;If you are a technical founder or the lead engineer on a marketplace, content probably lands on your desk eventually. Someone needs to decide whether to hire a freelance writer or sign with an agency, and that someone is often the person who least wants to think about blog posts.&lt;/p&gt;

&lt;p&gt;Here is the good news: you already know how to make this kind of decision. Choosing a content model is a lot like choosing between a single contractor and a managed service for any part of your stack. You look at capacity, coupling, ownership and failure modes. This post walks through the freelance-versus-agency question using that lens, based on Journeyhorizon's guide to &lt;a href="https://www.journeyh.io/blog/freelance-content-vs-agency" rel="noopener noreferrer"&gt;freelance content versus agencies for marketplace founders&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why marketplaces make this harder than usual
&lt;/h2&gt;

&lt;p&gt;For most businesses, content is a marketing concern. For a marketplace, it is coupled to the product. Your content has to earn trust from two audiences at once: supply (sellers, service providers) and demand (buyers). It has to support category pages and content hubs. It has to reflect how the platform actually works.&lt;/p&gt;

&lt;p&gt;That coupling is why so many founders get burned. Some hire a freelancer who writes clean posts that bring almost no traffic. Others sign with a generic content agency that has never thought about multi-sided platforms. In both cases the real question was skipped: does this person or team understand how marketplaces grow?&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare the two models like architectures
&lt;/h2&gt;

&lt;p&gt;Structurally, a freelancer is a single independent worker, usually paid per word, per article or per hour. An agency is a team (strategists, writers, editors, designers, project managers) under one contract, usually on a monthly retainer or project fee.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Freelancer&lt;/th&gt;
&lt;th&gt;Agency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Per word, article or hour&lt;/td&gt;
&lt;td&gt;Monthly retainer or project fee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Mostly execution&lt;/td&gt;
&lt;td&gt;Research, planning and execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput&lt;/td&gt;
&lt;td&gt;Capped by one person&lt;/td&gt;
&lt;td&gt;Can add writers and specialists&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coordination cost&lt;/td&gt;
&lt;td&gt;You brief, edit and coordinate&lt;/td&gt;
&lt;td&gt;Account manager coordinates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Good fit&lt;/td&gt;
&lt;td&gt;Early stage, a few focused pieces a month&lt;/td&gt;
&lt;td&gt;Scaling content across categories, both sides and SEO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Neither column is "better." Like a monolith versus services, the right answer depends on load and on how many concerns need to be coordinated.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a freelancer is the right dependency
&lt;/h2&gt;

&lt;p&gt;A freelancer is a strong choice in a few specific situations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Narrow, specialised output.&lt;/strong&gt; You need a handful of deep technical guides or case studies on your marketplace model, and you find someone with real niche expertise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steady single-focus cadence.&lt;/strong&gt; You need regular posts on a fixed schedule, and the freelancer understands your platform. Many founders keep the same freelancer for years, and that accumulated context is valuable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tight early budget.&lt;/strong&gt; You skip management overhead and work directly with the person producing the work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The failure mode is isolation. A freelancer can write a good post and still skip the SEO research that would help it rank, and is unlikely to coordinate with your technical implementation or broader growth plan. The bottleneck is rarely the writing itself; it is that the writer operates outside the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  When an agency is the right dependency
&lt;/h2&gt;

&lt;p&gt;Agencies earn their premium through integration. A capable one will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run keyword research that considers intent and competition, not just volume&lt;/li&gt;
&lt;li&gt;plan content that compounds into authority rather than isolated posts&lt;/li&gt;
&lt;li&gt;coordinate content with design, social and technical work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good agency is selling outcomes, meaning content that ranks, converts and supports growth, not just a word count.&lt;/p&gt;

&lt;p&gt;Agencies have their own failure modes, though, and you should test for them the way you would test a vendor SLA:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a retainer is a monthly commitment whether or not output is useful&lt;/li&gt;
&lt;li&gt;senior people may sell the deal and hand delivery to junior writers&lt;/li&gt;
&lt;li&gt;every request routes through an account manager, which adds latency&lt;/li&gt;
&lt;li&gt;a polished process cannot compensate for not understanding marketplaces&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The scaling problem nobody load-tests
&lt;/h2&gt;

&lt;p&gt;Early on you might need five to ten pieces in total. One freelancer handles that easily. As the marketplace grows, you need sustained output across the buyer journey, category pages and thought leadership.&lt;/p&gt;

&lt;p&gt;That is where the single-freelancer setup starts to degrade: quality dips or deadlines slip. Adding more freelancers introduces a distributed-systems problem: multiple relationships, inconsistent voice, and nobody coordinating strategy across writers.&lt;/p&gt;

&lt;p&gt;An agency scales more gracefully because capacity and specialists are already in the pool. But scale without strategy just produces noise. High volumes of mediocre content do not build authority. You need both throughput and expertise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coupling content to your codebase
&lt;/h2&gt;

&lt;p&gt;This is the part engineers usually underestimate. If you are shipping custom features, reworking platform architecture or adding AI to the user experience, your content should reflect those changes. Category page optimisation, for example, only works when content and development agree on the technical foundation. A content hub only works if it fits the site's information architecture.&lt;/p&gt;

&lt;p&gt;A freelancer focused purely on writing will not naturally sync with your dev team. Most content agencies lack deep technical knowledge too: they often do not understand marketplace architecture, Sharetribe customisations, plugin ecosystems or the implementation side of SEO.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick decision checklist
&lt;/h2&gt;

&lt;p&gt;Answer these four questions honestly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Do we need strategy, or only production?
      production only -&amp;gt; freelancer can work
[ ] What volume do we need?
      ~5 pieces/month -&amp;gt; freelancer
      ~50 pieces/month across formats -&amp;gt; agency capacity
[ ] How critical is niche expertise?
      a marketplace-savvy freelancer is valuable;
      starting from zero, an agency may ramp faster
[ ] Does content need to align with product and SEO architecture?
      yes -&amp;gt; you need a partner that understands that context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The choice is not binary. Many teams run a hybrid: a core team owns strategy and coordination, and freelancers contribute specialised pieces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes on evaluating providers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Compare full quotes, not headline per-article prices. Rates vary by experience and niche, and the real metric is return on investment.&lt;/li&gt;
&lt;li&gt;Ask about process: do they do SEO research, plan content clusters and pillar pages, and coordinate with a technical team?&lt;/li&gt;
&lt;li&gt;Ask for references and case studies from similar platforms. They matter more than size or brand.&lt;/li&gt;
&lt;li&gt;One strong freelancer usually beats several average ones for consistency. When one is no longer enough, that is a signal to look at an agency or structured partner model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is also worth noting that AI-driven search and answer engines tend to reward sites that show clear expertise, cover topics comprehensively and present information in a structured, trustworthy way. That raises the bar for coordinated strategy over one-off posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Treat your content model like any other dependency: pick it for the load you actually have, watch for its failure modes, and make sure it can talk to the rest of your system.&lt;/p&gt;

&lt;p&gt;If you want content and SEO that are planned alongside the platform itself, &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; combines marketplace development with &lt;a href="https://www.journeyh.io/services/seo" rel="noopener noreferrer"&gt;SEO services built for marketplaces&lt;/a&gt;, so the people writing about your product understand how it is built.&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>seo</category>
      <category>startup</category>
      <category>writing</category>
    </item>
    <item>
      <title>Before You Fork the Sharetribe Template: A Developer's Checklist for Deciding When Custom Code Is Worth It</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Mon, 02 Nov 2026 02:12:24 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/before-you-fork-the-sharetribe-template-a-developers-checklist-for-deciding-when-custom-code-is-36pj</link>
      <guid>https://dev.to/journeyhorizon/before-you-fork-the-sharetribe-template-a-developers-checklist-for-deciding-when-custom-code-is-36pj</guid>
      <description>&lt;p&gt;Every Sharetribe project I have seen go sideways shares one trait: someone opened a code editor before they opened the Console. The team assumed the platform could not do something, wrote a ticket, estimated it, and started building, only to discover weeks later that a configuration toggle or an existing integration would have covered most of the need.&lt;/p&gt;

&lt;p&gt;This post is a practical decision framework for developers and technical founders working on Sharetribe marketplaces. The goal is simple: treat custom code as the last step of a diagnostic process, not the first. It draws on the guidance in Journeyhorizon's article on &lt;a href="https://www.journeyh.io/blog/sharetribe-developers-the-experts-behind-custom-marketplace-success" rel="noopener noreferrer"&gt;when to customize Sharetribe with no-code versus custom code&lt;/a&gt;, reframed as something you can actually run through before a sprint planning session.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core rule: code is a response to a proven gap
&lt;/h2&gt;

&lt;p&gt;A Sharetribe marketplace can be launched and operated without any custom development. That is the whole point of the hosted backend and the no-code configuration layer. Custom code earns its place only when a specific group (customers, providers, or the operations team) needs something the current setup cannot reasonably support.&lt;/p&gt;

&lt;p&gt;Valid triggers usually look like one of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a booking or ordering journey that has to behave differently from the default flow&lt;/li&gt;
&lt;li&gt;an integration with another system that the business genuinely depends on&lt;/li&gt;
&lt;li&gt;a dedicated mobile app that users have shown they need&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An untested assumption about what users want is not a trigger. It is a hypothesis, and hypotheses get validated before they get built. Also remember that platform capabilities change over time, so check the current configuration options and documentation before you classify anything as a development task. Sharetribe's own guidance on custom coding makes the same point: get the no-code setup as close to your requirements as possible first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Run the default journeys end to end
&lt;/h2&gt;

&lt;p&gt;Before writing a single requirement, configure the closest workable version of the marketplace and walk through it like a QA engineer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Provider path: sign up -&amp;gt; complete profile -&amp;gt; publish a listing
[ ] Customer path: search -&amp;gt; view listing -&amp;gt; transact -&amp;gt; complete
[ ] Operator path: the admin work needed to keep both paths running
[ ] Log every gap as an observable problem, not a feature idea
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last line matters more than it seems. "We need better onboarding" is not actionable. "Providers cannot finish registration without emailing support to send extra documents" is. The second version tells you who is blocked, where, and what the workaround currently costs.&lt;/p&gt;

&lt;p&gt;For each logged gap, check three places before escalating: Console settings, supported integrations, and operational alternatives (a manual process, clearer copy, a form outside the platform).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Map the requirement to the right first move
&lt;/h2&gt;

&lt;p&gt;A useful way to triage is to match the type of requirement to the first thing you investigate:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement type&lt;/th&gt;
&lt;th&gt;First move&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Content, branding or field changes&lt;/td&gt;
&lt;td&gt;Check what the Console currently allows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A different customer or provider journey&lt;/td&gt;
&lt;td&gt;Map the required steps against the existing flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data exchange with another system&lt;/td&gt;
&lt;td&gt;Review available connectors and API requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A dedicated mobile app&lt;/td&gt;
&lt;td&gt;Assess a separate frontend app or a suitable template&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A feature nobody has asked for or tested&lt;/td&gt;
&lt;td&gt;Validate demand before building&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Treat this as a triage table, not a list of hard platform limits. What is possible depends on your exact requirements and on what the platform supports at the time you check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Spec the unhappy paths, not just the happy one
&lt;/h2&gt;

&lt;p&gt;When a requirement does point to custom code, the most common estimation mistake is specifying only the success path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom transaction flows
&lt;/h3&gt;

&lt;p&gt;Imagine a service marketplace that needs a structured request, a clarification step from the provider, and explicit customer approval before the job proceeds. The happy path is three screens. The real scope includes the exceptions: the provider never responds, the customer changes the request mid-flow, the transaction is cancelled halfway. If those branches are not in the spec, they will show up in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrations
&lt;/h3&gt;

&lt;p&gt;"Connect our CRM" is a starting point, not a requirement. Manual copying between systems is fine early on; it becomes an integration case when repeated transfers create delays, errors, or a growing workload. A spec worth estimating answers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;records&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;which entities move between systems&lt;/span&gt;
&lt;span class="na"&gt;source_of_truth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;which system owns the authoritative value&lt;/span&gt;
&lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;which event causes an update&lt;/span&gt;
&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;who can read and write what&lt;/span&gt;
&lt;span class="na"&gt;duplicates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;how they are detected and handled&lt;/span&gt;
&lt;span class="na"&gt;failure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;how a failed sync is surfaced and recovered&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Mobile apps
&lt;/h3&gt;

&lt;p&gt;A mobile app should solve a demonstrated problem: repeated tasks, friction in the mobile browser, something an app would clearly improve. A marketplace that already works well in a mobile browser may not need one. And an app adds its own overhead: release management, device testing and ongoing support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Prioritise with evidence, not opinions
&lt;/h2&gt;

&lt;p&gt;Support tickets, user interviews, abandoned journeys and repeated admin tasks are all evidence. Look at them together. One abandoned booking tells you nothing about why the person left, and it certainly does not prove a new feature would have saved it.&lt;/p&gt;

&lt;p&gt;For every candidate customisation, fill in a short record:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Problem:&lt;/strong&gt; what is hard or impossible today?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; what observations support it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alternative:&lt;/strong&gt; could configuration, clearer instructions or a temporary manual process solve it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; what will you measure after release?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ownership:&lt;/strong&gt; who runs and maintains the solution?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is a typical example. Providers keep submitting incomplete information. The root cause could be unclear instructions, missing validation, or a workflow the platform truly does not support. Each cause implies a very different scope, cost and maintenance load, so diagnose before you build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Budget for operations, not just the build
&lt;/h2&gt;

&lt;p&gt;Custom code has a lifetime cost. With a custom frontend, Sharetribe still runs the hosted backend, but your frontend needs external hosting and maintenance, and any extra services need named owners. If you customise the Sharetribe Web Template, upstream template releases do not flow in automatically; someone has to review and merge them.&lt;/p&gt;

&lt;p&gt;Agree on these before kickoff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;access to the repository, hosting accounts, deployment config and credentials&lt;/li&gt;
&lt;li&gt;the release approval process and who monitors production&lt;/li&gt;
&lt;li&gt;how production incidents are handled&lt;/li&gt;
&lt;li&gt;documentation that the business can follow even if the dev team changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testing should cover failure conditions specific to your change: interrupted payments, cancelled transactions, listings that become unavailable, and external services that stop responding. Ask for acceptance criteria and test results for your implementation, not generic quality promises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Write a brief a developer can actually assess
&lt;/h2&gt;

&lt;p&gt;A good brief describes current behaviour, the required change and the business reason, ideally with screenshots, screen recordings or a process diagram. For instance: approved provider records must be pushed to an operations system, the marketplace holds the authoritative approval status, and failed updates must be visible to an administrator. With that, a developer can evaluate API access, constraints and options.&lt;/p&gt;

&lt;p&gt;Ask for a proposal that lists assumptions, exclusions, dependencies, testing scope and ongoing responsibilities. If feasibility is unclear, start with a discovery task or a small proof of concept rather than a full build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship the smallest independently testable change
&lt;/h2&gt;

&lt;p&gt;Custom code makes sense when the requirement matters, the existing options have been checked, and someone owns the result. Where possible, pick a first release that can be delivered and evaluated on its own. Set acceptance criteria and baseline metrics before development begins, then review the results to decide whether further investment is justified.&lt;/p&gt;

&lt;p&gt;A few quick answers to questions that come up in every project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Can we launch without custom code?&lt;/strong&gt; Yes, if providers can publish, customers can transact, and your team can operate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do we need a rebuild to add code?&lt;/strong&gt; Not necessarily. The no-code setup can be the starting point for a custom frontend connected to the same hosted backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What does it cost?&lt;/strong&gt; There is no single price. Ask for estimates that separate the initial build from recurring hosting, maintenance and third-party costs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Run the default journeys, log gaps as observable problems, check configuration first, and spec the failure paths before you estimate. That discipline turns a vague wishlist into a scoped, testable change.&lt;/p&gt;

&lt;p&gt;If you are weighing a Sharetribe customisation and want a second opinion on scope, the team at &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; offers &lt;a href="https://www.journeyh.io/services/sharetribe" rel="noopener noreferrer"&gt;Sharetribe development services&lt;/a&gt; and can review your current setup, the problem you are trying to solve, and the evidence behind it.&lt;/p&gt;

</description>
      <category>sharetribe</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>startup</category>
    </item>
    <item>
      <title>Shipping a Sharetribe Marketplace Is Not the Same as Handing It Over: A Developer's Checklist</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Fri, 30 Oct 2026 09:38:21 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/shipping-a-sharetribe-marketplace-is-not-the-same-as-handing-it-over-a-developers-checklist-53b7</link>
      <guid>https://dev.to/journeyhorizon/shipping-a-sharetribe-marketplace-is-not-the-same-as-handing-it-over-a-developers-checklist-53b7</guid>
      <description>&lt;p&gt;You merged the last pull request, the staging demo looks great, and the client is ready to say "thanks, we're done." On a Sharetribe project, that moment is where a lot of future pain gets created. A working demo proves that something runs today. It does not prove that anyone else can deploy it, maintain it, or safely change it six months from now.&lt;/p&gt;

&lt;p&gt;This post is a practical handover checklist for Sharetribe marketplace builds, written from the point of view of the team doing the delivery. Treat it like a definition of done for the whole project rather than for a single ticket. If you are on the founder side, you can use the same list to review what you are being handed.&lt;/p&gt;

&lt;p&gt;One caveat before we start: scale the checklist to the scope. A pure no-code configuration in the Sharetribe Console will not produce a repository, a CI pipeline, or a custom hosting setup. A heavily customised Sharetribe Web Template will produce all three. Skip the sections that genuinely do not apply, but write down that you skipped them and why.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Reconcile the scope against what actually shipped
&lt;/h2&gt;

&lt;p&gt;Start from the agreed scope of work, every approved change request, and the acceptance criteria. Then walk through each requirement and give it one of three states:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Complete&lt;/strong&gt; – delivered and verified&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Deferred&lt;/strong&gt; – intentionally moved out of this phase&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Awaiting decision&lt;/strong&gt; – blocked on a business call, not on engineering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trap here is vague sign-off. "Booking works" is not an acceptance statement. "A logged-in customer can request a booking for an available date range, the provider receives a notification, and the provider can accept or decline" is. Name the action, the conditions it must work under, and the evidence you used to confirm it (a test run, a recording, a screenshot of the transaction in the Console).&lt;/p&gt;

&lt;p&gt;If requirements moved during development, which they almost always do, update the acceptance record so it reflects the scope you actually built, not the one from the kickoff deck.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Code, access, and the rights attached to it
&lt;/h2&gt;

&lt;p&gt;For custom-coded builds, the repository section of the handover should answer three practical questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Where does the code live, and who has access?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Which branch or tag is running in production?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How does a new developer get it running locally?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That third point deserves a real README, not a Slack message. Something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;repo-url&amp;gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;marketplace-web
yarn &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env-template .env   &lt;span class="c"&gt;# fill values from the secure vault, never from the doc&lt;/span&gt;
yarn run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the part developers often skip: &lt;strong&gt;access is not the same as ownership.&lt;/strong&gt; Giving the client admin rights on the repo does not settle how the code may be used. The contract and the licences do. Commercial plugins, paid templates, and third-party dependencies may come with terms that do not allow the same transfer or reuse as your own custom work. List them explicitly.&lt;/p&gt;

&lt;p&gt;Finally, write a short customisation log: what you changed in the template, where it lives, and why. The goal is that another qualified Sharetribe developer can locate an important change and understand its purpose without needing a call with you.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Accounts, environments, and deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The account register
&lt;/h3&gt;

&lt;p&gt;A marketplace rarely runs on Sharetribe alone. You will typically have hosting, a domain, a payment provider, transactional email, and a few integrations. Build a simple register:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Payment provider&lt;/span&gt;
  &lt;span class="na"&gt;business_owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Founder (company account)&lt;/span&gt;
  &lt;span class="na"&gt;billing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Company card&lt;/span&gt;
  &lt;span class="na"&gt;authorised_users&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;founder&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;ops lead&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;recovery&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Company email + 2FA device held by founder&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Frontend hosting&lt;/span&gt;
  &lt;span class="na"&gt;business_owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Company&lt;/span&gt;
  &lt;span class="na"&gt;billing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Company card&lt;/span&gt;
  &lt;span class="na"&gt;authorised_users&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;founder&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;dev team&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;recovery&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Company email&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the delivery team manages any of these on the client's behalf, document how access, data, and configuration would move if that arrangement ends. And please: transfer credentials through a secure method, not inside the handover document itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Environments
&lt;/h3&gt;

&lt;p&gt;Sharetribe gives you &lt;strong&gt;Test&lt;/strong&gt;, &lt;strong&gt;Dev&lt;/strong&gt;, and &lt;strong&gt;Live&lt;/strong&gt; environments. The handover should state which frontend points at which environment, and where acceptance testing was actually performed. A flawless demo on a dev application tells you nothing certain about production configuration. Verify Live settings through an agreed release check, and do not use real customer transactions as your test suite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;p&gt;For a custom frontend, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Hosting provider and account owner&lt;/li&gt;
&lt;li&gt;[ ] Release process and who is allowed to publish&lt;/li&gt;
&lt;li&gt;[ ] Currently deployed version&lt;/li&gt;
&lt;li&gt;[ ] Required environment variables and configuration&lt;/li&gt;
&lt;li&gt;[ ] Rollback or recovery procedure if a release fails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember the split of responsibility: Sharetribe keeps operating the hosted backend, but a custom frontend adds hosting and maintenance work that belongs to someone else. The handover should say who.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Test journeys, not screens
&lt;/h2&gt;

&lt;p&gt;Unit tests and screen-by-screen QA catch a lot, but marketplace bugs love to hide in the gaps between steps. Test the complete actions customers, providers, and operators need to finish.&lt;/p&gt;

&lt;p&gt;Pick scenarios that match the business model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rental marketplace:&lt;/strong&gt; availability → booking → cancellation → deposit handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service marketplace:&lt;/strong&gt; request → provider response → job completion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then add the exceptions the system is supposed to handle. A useful example comes from Journeyhorizon's rental marketplace case study for Side By Side Share, which involved identity verification, deposits, location privacy, agreements, and messaging integrations. The point is that a verification screen rendering correctly is only half the requirement. You also need to agree what happens when verification is incomplete or fails, and how that changes the user's next step.&lt;/p&gt;

&lt;p&gt;Keep the test record easy to read: scenario, expected result, observed result, status, open issue link. Be honest about its limits, too. A test report supports acceptance of what was reviewed; it does not prove the absence of defects.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Document integrations like you will be paged for them
&lt;/h2&gt;

&lt;p&gt;For each integration, write down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is connected and what data moves between systems&lt;/li&gt;
&lt;li&gt;What triggers each exchange&lt;/li&gt;
&lt;li&gt;Which system is the source of truth&lt;/li&gt;
&lt;li&gt;Required permissions and known constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then cover failure handling, which is the section everyone forgets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] How does a failed update become visible?&lt;/li&gt;
&lt;li&gt;[ ] Are there automatic retries?&lt;/li&gt;
&lt;li&gt;[ ] Who investigates?&lt;/li&gt;
&lt;li&gt;[ ] What manual recovery steps can an operator take?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pair this with operating instructions for recurring tasks: reviewing new listings or submissions, handling transaction exceptions, updating content, and triaging reported problems. A short recorded walkthrough next to the written docs makes the transfer of responsibility much smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Known issues and post-acceptance support
&lt;/h2&gt;

&lt;p&gt;Before closing the project, split the backlog into three buckets: &lt;strong&gt;unresolved defects&lt;/strong&gt;, &lt;strong&gt;approved exclusions&lt;/strong&gt;, and &lt;strong&gt;future feature requests&lt;/strong&gt;. Each item gets an impact, a status, and a next action.&lt;/p&gt;

&lt;p&gt;Then define support after acceptance: the contact route, what is covered, response expectations, and who owns hosting, application maintenance, and third-party services. Keep any initial defect-fix window clearly separate from ongoing maintenance and new development, or you will spend months arguing about what counts as a bug.&lt;/p&gt;

&lt;p&gt;If you customised the Sharetribe Web Template, agree on how upstream template updates will be reviewed and applied. And if a different team is taking over, schedule a walkthrough of the app, the repo, the deployment process, and the open issues before they touch anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick FAQ for the client conversation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does every Sharetribe project need a repo?&lt;/strong&gt; No. Pure Console configuration may not create one. If there is custom code, confirm how it is delivered, who can access it, and the usage rights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does receiving the source code mean the client owns it?&lt;/strong&gt; Not automatically. Check the agreement and the terms of any third-party components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Must every issue be fixed before acceptance?&lt;/strong&gt; It depends on the acceptance criteria and impact. A bug that blocks an essential journey is a different decision from a polish item that can be scheduled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can a non-technical founder review this?&lt;/strong&gt; Walk through the business journeys, the account register, the operating instructions, and the open-issues list with the team, and ask for demos tied to specific acceptance criteria. For code quality, security, or architecture, an independent technical review is reasonable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;A good handover is a record of three things: what was delivered, how it was verified, and who maintains it from here. Ship that alongside the code and the next developer, possibly future you, will thank you.&lt;/p&gt;

&lt;p&gt;This checklist is adapted from &lt;a href="https://www.journeyh.io/blog/sharetribe-developer" rel="noopener noreferrer"&gt;Journeyhorizon's Sharetribe project handover guide&lt;/a&gt;. If you want a second pair of eyes on a Sharetribe build or handover, the team behind &lt;a href="https://www.journeyh.io/services/sharetribe" rel="noopener noreferrer"&gt;Journeyhorizon's Sharetribe development services&lt;/a&gt; does this kind of review regularly, and you can find more of their marketplace engineering work at &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>sharetribe</category>
      <category>webdev</category>
      <category>startup</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Keyword Mapping Is a Routing Table: Assigning Search Intent to Marketplace Pages</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Thu, 29 Oct 2026 05:02:42 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/keyword-mapping-is-a-routing-table-assigning-search-intent-to-marketplace-pages-n0j</link>
      <guid>https://dev.to/journeyhorizon/keyword-mapping-is-a-routing-table-assigning-search-intent-to-marketplace-pages-n0j</guid>
      <description>&lt;p&gt;If you've ever built a web app, you already understand keyword mapping. You just know it by another name: routing.&lt;/p&gt;

&lt;p&gt;A router takes an incoming request and sends it to exactly one handler. If two handlers claim the same path, you get a conflict. If a path has no handler, you get a 404. If you shove every route into one giant controller, it works for a while and then becomes impossible to maintain.&lt;/p&gt;

&lt;p&gt;Search works the same way. A query comes in, Google decides which of your URLs should handle it, and if you haven't been explicit, it guesses. On a marketplace, with hundreds or thousands of category, seller and listing pages, it guesses badly.&lt;/p&gt;

&lt;p&gt;This post treats keyword mapping as a routing table for search intent, based on Journeyhorizon's &lt;a href="https://www.journeyh.io/blog/keyword-mapping-for-marketplaces" rel="noopener noreferrer"&gt;guide to keyword mapping for marketplaces&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What keyword mapping actually is
&lt;/h2&gt;

&lt;p&gt;Keyword mapping is the process of assigning target search terms to specific pages, so each page has a clear job. The workflow has three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Research&lt;/strong&gt; the keywords your buyers and sellers actually use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group&lt;/strong&gt; them into clusters by topic and search intent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign&lt;/strong&gt; each cluster to the one page that should rank for it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On a blog or a SaaS site, the "pages" are mostly articles and a few service pages. On a marketplace, the route table is far richer: category pages, filtered listing pages, seller profiles, seller onboarding, content hubs and comparison pages all compete for attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  The route table for a marketplace
&lt;/h2&gt;

&lt;p&gt;Here is the mapping the source recommends, rewritten as a routing config. Treat it as pseudocode for your SEO plan, not as something a framework will execute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;routes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;category_page&lt;/span&gt;          &lt;span class="c1"&gt;# main pillar pages&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high-volume, high-intent buyer&lt;/span&gt;
    &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;best&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;project&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;management&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tools"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;filtered_listing_page&lt;/span&gt;  &lt;span class="c1"&gt;# refined category views&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;long-tail, specific buyer&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;affordable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;project&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;management&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tools&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$50"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;best&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;free&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;project&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;management&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;software&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;small&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;teams"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;seller_guide&lt;/span&gt;           &lt;span class="c1"&gt;# supply-side education&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;informational, seller&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;how&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;optimize&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;seller&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;profile"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pricing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;strategies&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;providers"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;how&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;get&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;more&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reviews&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;as&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;seller"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;blog_or_industry_guide&lt;/span&gt; &lt;span class="c1"&gt;# authority content&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;research&lt;/span&gt;
    &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;state&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;freelance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;economy"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;comparison_page&lt;/span&gt;        &lt;span class="c1"&gt;# evaluation stage&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high-intent, comparing platforms&lt;/span&gt;
    &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;platform&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;vs&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;competitor&amp;gt;"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;homepage&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;brand&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two rules make this table work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One primary handler per cluster.&lt;/strong&gt; A keyword cluster maps to one primary page. Supporting pages link to it; they don't compete with it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handler type must match intent.&lt;/strong&gt; "Freelance writers" is a category-page query, not a blog-post query. Someone typing it wants to browse writers, not read an essay.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The source's own example of intent routing is a nice sanity check: a buyer searching "best handmade leather bags" should land on a category page, a prospective seller looking to list should land on onboarding, and an investor researching trends should land on the blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  How many keywords per page?
&lt;/h2&gt;

&lt;p&gt;The guide's rule of thumb: &lt;strong&gt;one primary keyword plus 3–5 closely related secondary keywords&lt;/strong&gt; per page. Think of it like a route with a few aliases. More than that and the page usually stops having a clear purpose.&lt;/p&gt;

&lt;p&gt;And on the homepage vs category debate: category pages usually win. Keep the homepage focused on the brand and let category pages capture high-intent buyer and seller queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five bugs that break the routing
&lt;/h2&gt;

&lt;p&gt;The source lists five mapping mistakes. Here they are as bug reports.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug 1: Ambiguous routes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; a category page and a blog post both target "how to buy handmade jewellery." Neither ranks well.&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; pick one primary page per keyword. The other page links to the owner instead of competing with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug 2: Wrong handler type
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; commercial queries are routed to blog posts, so searchers bounce.&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; match page type to intent using the table above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug 3: Static config
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; the map was built at launch and never touched again, while new categories and segments shipped.&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; review and refresh the map quarterly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug 4: Content not wired to the router
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; blog posts get published because a topic "seemed interesting," and categories launch with no keyword research behind them.&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; content strategy flows &lt;em&gt;from&lt;/em&gt; the map. If a piece of content doesn't own or support a mapped cluster, question why it exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug 5: Only one side of the market is routed
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; every mapped keyword is a buyer query. Supply growth relies entirely on outbound sales.&lt;br&gt;
&lt;strong&gt;Fix:&lt;/strong&gt; map seller queries too, like "how to become a seller" or "selling on our platform." Marketplaces live or die on supply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat the map like code: review it on a schedule
&lt;/h2&gt;

&lt;p&gt;The guide's maintenance advice translates neatly into a recurring job. Once a quarter, run through this checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Which mapped keywords are actually driving organic traffic?&lt;/li&gt;
&lt;li&gt;[ ] Which pages are ranking for keywords you &lt;em&gt;didn't&lt;/em&gt; plan? (Often a hint of a new opportunity.)&lt;/li&gt;
&lt;li&gt;[ ] Which clusters have no page at all? (Your 404s.)&lt;/li&gt;
&lt;li&gt;[ ] Where do multiple pages rank for the same keyword? Pick one owner and adjust internal links to support it.&lt;/li&gt;
&lt;li&gt;[ ] Are there new search trends in fast-moving categories?&lt;/li&gt;
&lt;li&gt;[ ] Are any mapped clusters still unoptimized?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Store the map somewhere versioned, even if it's just a spreadsheet with a change log. When categories or features ship, updating the map should be part of the definition of done, the same way updating routes and tests is.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal schema for the map
&lt;/h2&gt;

&lt;p&gt;You don't need a dedicated tool to get started. A table with these columns covers most of what the guide describes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Column&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cluster&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The primary keyword plus its 3–5 secondary keywords&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;intent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;buyer, seller, research or comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;owner_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The single page that should rank&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;supporting_urls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pages that link to the owner instead of competing with it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;last_reviewed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Date of the last quarterly check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;mapped, page missing, needs optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Filter by &lt;code&gt;status = page missing&lt;/code&gt; and you have a content backlog. Filter by duplicate &lt;code&gt;cluster&lt;/code&gt; values across different owners and you have your cannibalization bugs. It's a small amount of structure that makes the whole process reviewable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting without data
&lt;/h2&gt;

&lt;p&gt;A common objection: "We're pre-launch, we have no ranking data." The guide's answer is pragmatic. Start with your core categories and the main buyer and seller journeys, then refine as ranking and traffic data accumulates over several months. That's exactly how you'd ship an MVP router: cover the critical paths first, add routes as usage reveals them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits beyond organic search
&lt;/h2&gt;

&lt;p&gt;Keyword mapping mainly pays off in organic traffic, but the source notes an indirect effect too. Cleaner site structure, better content and stronger internal linking build authority that also helps paid, referral and word-of-mouth channels. A well-organized site is easier for everyone to navigate, not just crawlers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Keyword mapping won't produce overnight wins. It's foundational work, and the guide frames it as what separates marketplaces that grow through organic search from those that stay dependent on paid ads.&lt;/p&gt;

&lt;p&gt;If you'd like a team to build or audit that routing table with you, &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; works specifically with marketplaces, and its &lt;a href="https://www.journeyh.io/services/seo" rel="noopener noreferrer"&gt;SEO services for marketplaces&lt;/a&gt; cover keyword strategy alongside technical SEO. Either way, start today: open a spreadsheet, list your page types, and give every important query exactly one home.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>startup</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Hiring a B2B Ecommerce Agency? Debug the Failing Layer Before You Read the Rankings</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Thu, 29 Oct 2026 05:01:55 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/hiring-a-b2b-ecommerce-agency-debug-the-failing-layer-before-you-read-the-rankings-3abk</link>
      <guid>https://dev.to/journeyhorizon/hiring-a-b2b-ecommerce-agency-debug-the-failing-layer-before-you-read-the-rankings-3abk</guid>
      <description>&lt;p&gt;Most B2B ecommerce projects that go sideways don't fail because of bad code. They fail because the team hired to fix the system was built to fix a different layer of it. A storefront agency gets brought in to solve an ERP sync problem. A marketing shop is asked to untangle contract pricing. An enterprise transformation firm is handed a focused marketplace MVP and spends the first quarter on governance decks.&lt;/p&gt;

&lt;p&gt;If you are the engineer, tech lead or technical founder asked to "help pick an agency," this post is for you. Instead of a beauty contest, treat the decision like scoping a systems integration: figure out which layer is broken, then hire for that layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why B2B commerce is a different beast
&lt;/h2&gt;

&lt;p&gt;A consumer storefront mostly needs a catalog, a cart, a checkout and decent page speed. A B2B buyer expects much more from the system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accurate, account-specific pricing (often contract pricing)&lt;/li&gt;
&lt;li&gt;real-time inventory they can trust before committing a purchase order&lt;/li&gt;
&lt;li&gt;quote and RFQ workflows&lt;/li&gt;
&lt;li&gt;purchase approvals and account permissions inside the buyer's company&lt;/li&gt;
&lt;li&gt;fast repeat ordering&lt;/li&gt;
&lt;li&gt;integration with the systems that actually run the business: ERP, CRM, PIM, inventory, accounting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every one of those requirements is a data flow, not a page template. That is why an agency with a beautiful retail portfolio can still be the wrong pick. The useful question is not "are they good?" but "are they good at the layer where my problem lives?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Locate the failing layer
&lt;/h2&gt;

&lt;p&gt;Before you open a single agency website, write down which of these layers is actually hurting. Be honest; most teams have one primary problem and two secondary ones.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Growth layer     ]  demand gen, SEO, paid, CRM attribution, account revenue
[ Experience layer ]  UX, checkout usability, conversion, buyer portal
[ Platform layer   ]  Adobe Commerce / Magento, Shopify Plus, BigCommerce, Shopware...
[ Integration layer]  ERP &amp;lt;-&amp;gt; storefront &amp;lt;-&amp;gt; CRM &amp;lt;-&amp;gt; inventory &amp;lt;-&amp;gt; EDI
[ Model layer      ]  marketplace mechanics: multi-vendor, vendor dashboards, net terms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A quick diagnostic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Orders arrive but stock, pricing or order status are wrong&lt;/strong&gt; → integration layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The platform is slow, unstable or due for a migration&lt;/strong&gt; → platform layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traffic is fine but buyers abandon or call sales instead&lt;/strong&gt; → experience layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketing reports clicks while sales can't see account revenue&lt;/strong&gt; → growth layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You are launching a multi-vendor or B2B marketplace from scratch&lt;/strong&gt; → model layer, and probably growth too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Map layers to agency archetypes
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.journeyh.io/blog/top-b2b-ecommerce-agencies" rel="noopener noreferrer"&gt;original ranking of B2B ecommerce agencies&lt;/a&gt; profiles eleven firms. Read as data rather than as a leaderboard, they cluster neatly into archetypes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failing layer&lt;/th&gt;
&lt;th&gt;Archetype&lt;/th&gt;
&lt;th&gt;Examples from the list&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model (marketplace build/scale)&lt;/td&gt;
&lt;td&gt;Marketplace specialist&lt;/td&gt;
&lt;td&gt;Journeyhorizon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;ERP-first integration platform&lt;/td&gt;
&lt;td&gt;DCKAP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform (enterprise, complex)&lt;/td&gt;
&lt;td&gt;Enterprise B2B builder&lt;/td&gt;
&lt;td&gt;Elogic Commerce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform (stack-specific)&lt;/td&gt;
&lt;td&gt;Platform specialist&lt;/td&gt;
&lt;td&gt;Classy Llama (Adobe Commerce/Magento), IntuitSolutions (BigCommerce only), Space 48 (BigCommerce, Shopware), Trellis, Inchoo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experience&lt;/td&gt;
&lt;td&gt;Conversion-focused build shop&lt;/td&gt;
&lt;td&gt;Absolute Web&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Growth + data&lt;/td&gt;
&lt;td&gt;RevOps-minded growth agency&lt;/td&gt;
&lt;td&gt;SeedX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everything, globally&lt;/td&gt;
&lt;td&gt;Enterprise transformation&lt;/td&gt;
&lt;td&gt;VML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tech + data + AI + marketing&lt;/td&gt;
&lt;td&gt;Alignment partner&lt;/td&gt;
&lt;td&gt;PeakActivity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few details worth noting from the profiles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Elogic Commerce&lt;/strong&gt; has been around since 2009 with 200+ specialists, works on Adobe Commerce and Shopify Plus, and handles contract pricing, RFQ/CPQ, PunchOut, approvals and account hierarchies with SAP S/4HANA, Microsoft Dynamics 365 and NetSuite integrations. The source cites five times faster order approvals for Armacell and a Shopify Plus B2B build for PetHQ that launched in 2.5 months and generated $1.1 million in new B2B revenue in its first year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classy Llama&lt;/strong&gt; has worked on Magento and Adobe Commerce since 2007, holds 47 Adobe certifications and has completed more than 200 builds on those platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IntuitSolutions&lt;/strong&gt; works exclusively on BigCommerce with a fully U.S.-based team, and earned the BigCommerce B2B Specialization in 2024, which the source says fewer than 4% of certified agencies held at the time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DCKAP&lt;/strong&gt; is not really an agency at all; its Integrator product connects ERP with ecommerce, CRM, inventory, accounting, logistics, marketplaces and EDI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SeedX&lt;/strong&gt; focuses on HubSpot, RevOps and analytics, tying campaigns to pipeline and margin rather than platform ROAS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that the source was published by Journeyhorizon, which ranks itself first. That doesn't make the data useless, but treat any ranking as a shortlist generator, not a verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Run a technical interview, not a sales call
&lt;/h2&gt;

&lt;p&gt;Once you have two or three candidates per layer, interview them like you would a senior hire. Here is a checklist you can paste into your evaluation doc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integration questions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Which ERPs have you integrated in production, and what was the sync model (event-driven, scheduled batch, middleware)?&lt;/li&gt;
&lt;li&gt;[ ] How do you handle pricing as the source of truth: ERP, PIM or the commerce platform?&lt;/li&gt;
&lt;li&gt;[ ] What happens when the ERP is down during checkout?&lt;/li&gt;
&lt;li&gt;[ ] Can you show an integration runbook or monitoring setup from a past project?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Platform questions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Why this platform for our catalog size and pricing complexity, and what would make you recommend a different one?&lt;/li&gt;
&lt;li&gt;[ ] How do you approach migrations without losing organic traffic (redirect maps, technical SEO checks)?&lt;/li&gt;
&lt;li&gt;[ ] Who owns the codebase and infrastructure after launch?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B2B workflow questions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Walk us through company accounts, roles and approval chains in a project you shipped.&lt;/li&gt;
&lt;li&gt;[ ] How do you model net terms, quotes and repeat orders?&lt;/li&gt;
&lt;li&gt;[ ] How do buyers with negotiated pricing see their catalog?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Growth questions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] What metrics will you report: traffic, or pipeline, CAC, retention and account profitability?&lt;/li&gt;
&lt;li&gt;[ ] How does campaign data connect to CRM and order data?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an agency struggles with the questions for the layer you're hiring them for, that's your answer. If they shine on a layer you don't need, that's interesting, but it shouldn't move the decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Watch for mismatch anti-patterns
&lt;/h2&gt;

&lt;p&gt;The source calls out three combinations worth avoiding, and they're easy to fall into:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A design-heavy agency when ERP data is broken.&lt;/strong&gt; You get a gorgeous portal that shows wrong prices faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An integration platform for a demand-generation problem.&lt;/strong&gt; Your data flows perfectly to an audience that never arrives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An enterprise transformation program for a focused marketplace launch.&lt;/strong&gt; Months of process before a single vendor is onboarded.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A fourth from experience: hiring generalists for a marketplace. Multi-vendor B2B has its own mechanics, such as vendor onboarding, vendor dashboards, custom pricing per company account, net terms, procurement workflows and catalog management across sellers. Those belong to the model layer, and it pays to hire someone who has built them before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a marketplace specialist fits
&lt;/h2&gt;

&lt;p&gt;If your project sits in the model layer, the profile of &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt; in the source covers B2B marketplace development, Sharetribe customization and migration, multi-vendor web and mobile templates, ERP/CRM/inventory integrations, and the growth side: vendor acquisition, SEO, content, LinkedIn ads and reporting. The B2B feature set listed includes company accounts, custom pricing, net terms, advanced catalog management, procurement workflows and vendor dashboards. If that matches your scope, their &lt;a href="https://www.journeyh.io/services/b2b-multi-vendor-marketplace" rel="noopener noreferrer"&gt;B2B multi-vendor marketplace development service&lt;/a&gt; is the relevant starting point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Location: mostly noise
&lt;/h2&gt;

&lt;p&gt;The FAQ in the source tackles searches like "B2B ecommerce agency Boston" or "Austin." The short version: proximity can make collaboration easier, but B2B workflow knowledge, integration capability and platform experience matter more. A remote specialist on your exact stack usually beats a local generalist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Treat agency selection like any other architecture decision:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify the failing layer.&lt;/li&gt;
&lt;li&gt;Map it to the right archetype.&lt;/li&gt;
&lt;li&gt;Interview with layer-specific technical questions.&lt;/li&gt;
&lt;li&gt;Reject mismatches early, even if the portfolio is impressive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do that, and the "top agencies" list stops being a ranking and becomes what it should be: a well-labeled parts bin. Pick the part that fits the socket you actually have.&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>b2b</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Shipping a Marketplace App to iOS and Android From One Codebase: An Engineering Checklist</title>
      <dc:creator>Journeyhorizon</dc:creator>
      <pubDate>Wed, 28 Oct 2026 07:06:37 +0000</pubDate>
      <link>https://dev.to/journeyhorizon/shipping-a-marketplace-app-to-ios-and-android-from-one-codebase-an-engineering-checklist-4do7</link>
      <guid>https://dev.to/journeyhorizon/shipping-a-marketplace-app-to-ios-and-android-from-one-codebase-an-engineering-checklist-4do7</guid>
      <description>&lt;p&gt;Most "native vs cross-platform" threads turn into framework fights. For marketplace apps, the framework is the least interesting part of the decision. The questions that actually move your timeline and budget are these: how many platforms you must hit on day one, how far your UI drifts from stock components, which integrations you can't live without, and how users will find the app at all.&lt;/p&gt;

&lt;p&gt;This post turns those questions into a checklist you can run before &lt;code&gt;flutter create&lt;/code&gt; or &lt;code&gt;npx create-expo-app&lt;/code&gt;. It's based on a longer guide on &lt;a href="https://www.journeyh.io/blog/multi-platform-mobile-application-development" rel="noopener noreferrer"&gt;multi-platform mobile app development for marketplaces&lt;/a&gt; from the team at &lt;a href="https://www.journeyh.io/" rel="noopener noreferrer"&gt;Journeyhorizon&lt;/a&gt;, a marketplace development agency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "both platforms on day one" is the default for marketplaces
&lt;/h2&gt;

&lt;p&gt;A marketplace has two sides, and you rarely control which phone either side carries. Android holds roughly 70% of global market share, yet iOS matches or leads in many developed markets and among high-value users. If your sellers mostly carry Android and your buyers mostly carry iPhones (or the other way round), shipping one platform first means half of your market walks into an empty room.&lt;/p&gt;

&lt;p&gt;That's why the "launch on one, learn, then port" plan rarely survives contact with a real marketplace roadmap. The economics point the same way: building two separate native apps can cost 30–40% more than a single cross-platform build, and a shared codebase lets one team ship to both stores instead of coordinating two teams or two sequential projects. Time-to-market matters too, because a competitor that lands on both stores first gets to the users first.&lt;/p&gt;

&lt;p&gt;Before going further, write down the answers to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Which side of the marketplace is on which platform?
[ ] Can we launch with only one side served? (usually: no)
[ ] Does a competitor already cover both stores?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the answers push you toward both platforms, the next question is how much code you can realistically share.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reusability vs customisation: the real trade-off
&lt;/h2&gt;

&lt;p&gt;Frameworks advertise big numbers. Flutter and React Native typically claim 70–90% code sharing. Kotlin Multiplatform takes a different route: it shares business logic but keeps a native UI on each side. Ionic is the comfortable option for teams coming from the web.&lt;/p&gt;

&lt;p&gt;The catch is that the sharing percentage is not really a property of the framework. It's a property of your product. Every time you ask for a screen that feels distinctly iOS on an iPhone and distinctly Android on a Pixel, or for heavy custom animation, the shared portion shrinks.&lt;/p&gt;

&lt;p&gt;A rough way to place your app:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Product type&lt;/th&gt;
&lt;th&gt;Customisation need&lt;/th&gt;
&lt;th&gt;What to expect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Booking, local services, resale, SaaS-style tools&lt;/td&gt;
&lt;td&gt;Low to moderate&lt;/td&gt;
&lt;td&gt;High code sharing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fashion, design and other highly visual catalogues&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Lower sharing; plan custom work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR product previews or deep device features&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;td&gt;Plan platform-specific modules&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The architecture that ages well is a foundation that ships fast and accepts extensions: custom plugins and platform-specific features layered on top without forcing a full rewrite. Sharetribe is one example of that pattern on the marketplace side, giving you a proven core you extend rather than replace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit your integrations before you pick a framework
&lt;/h2&gt;

&lt;p&gt;Marketplace apps are integration-heavy. A typical list looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;payments and payouts&lt;/li&gt;
&lt;li&gt;shipping labels&lt;/li&gt;
&lt;li&gt;push notifications&lt;/li&gt;
&lt;li&gt;analytics&lt;/li&gt;
&lt;li&gt;fraud detection&lt;/li&gt;
&lt;li&gt;CRM sync&lt;/li&gt;
&lt;li&gt;industry-specific services for your vertical&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ecosystem depth varies by framework. React Native has the largest library ecosystem. Flutter's is growing but smaller. Kotlin Multiplatform's plugin architecture is still maturing. None of this disqualifies a framework, but it changes your estimate.&lt;/p&gt;

&lt;p&gt;A simple exercise: make a table with each required integration, then mark it "official SDK", "maintained community package" or "we build it". Anything in the third column is scope, and scope belongs in the plan, not in a surprise sprint three weeks before launch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;integration        | flutter   | react-native | decision
-------------------|-----------|--------------|---------
payments           | ?         | ?            |
push               | ?         | ?            |
fraud detection    | ?         | ?            |
&amp;lt;niche vertical&amp;gt;   | ?         | ?            |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill the question marks with what you actually verify, not what you remember from an old blog post. If you're building on Sharetribe, much of this foundation is already in place and custom integrations can be commissioned on top. A standalone app means more hands-on integration work, or a partner who has done it before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discoverability is part of the architecture
&lt;/h2&gt;

&lt;p&gt;This is the part engineers tend to skip. A well-built app nobody finds is still a failed launch. App store optimisation, user acquisition, SEO, content and brand authority matter as much as frame rates.&lt;/p&gt;

&lt;p&gt;Growth strategy should influence technical choices from the start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SEO-driven acquisition&lt;/strong&gt; means you need crawlable web surfaces: structured data and category pages that can rank, not only a mobile binary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word-of-mouth growth&lt;/strong&gt; shifts weight toward in-app referral mechanics, deep links and share flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treat these as requirements in sprint one, not marketing tasks for month six. Organic growth that is planned early is what makes scaling sustainable instead of expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI and custom features fit
&lt;/h2&gt;

&lt;p&gt;Shipping a decent cross-platform app is now the baseline. Differentiation is moving to AI-driven personalisation, recommendations, fraud detection, intelligent search, automation and custom workflows.&lt;/p&gt;

&lt;p&gt;Cross-platform frameworks handle calls to AI APIs, such as a recommendation engine or an image recognition service, without much friction. Things get harder when you want custom AI experiences or models trained on your own product data; those usually need specialised development or platform-specific optimisation. Budget for that separately from "build the app".&lt;/p&gt;

&lt;h2&gt;
  
  
  A decision matrix you can paste into your ADR
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IF  first mobile product AND need iOS + Android
    -&amp;gt; proven framework (Flutter or React Native)
IF  already running on Sharetribe
    -&amp;gt; start from mobile templates built for multi-platform
IF  platform-specific UX OR advanced integrations required
    -&amp;gt; budget custom work on top of the framework
IF  growth/discoverability is critical
    -&amp;gt; partner that covers both app development and digital growth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal isn't the trendiest stack. It's one that launches quickly, reaches both platforms and scales without a rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timeline sanity check
&lt;/h2&gt;

&lt;p&gt;Multi-platform development is typically 20–40% faster than separate native builds. Ballpark ranges from the source guide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simple marketplace MVP with a solid team: &lt;strong&gt;8–12 weeks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;full-featured platform with custom integrations: &lt;strong&gt;16–24 weeks&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an estimate lands far below these, ask what was left out of scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick FAQ for the team channel
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is multi-platform right for every marketplace?&lt;/strong&gt; Most benefit, especially early on. Listings, messaging, ratings and payments work well cross-platform. Highly visual products, or those needing advanced native features, need custom development on top.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-platform vs cross-platform: same thing?&lt;/strong&gt; They're often used interchangeably. Strictly, multi-platform spans iOS, Android, web and desktop, while cross-platform usually means iOS plus Android. Modern frameworks can handle both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can we plug in third-party services?&lt;/strong&gt; Payment gateways, analytics and push notifications are standard. Niche integrations may need custom development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Run the checklist before the framework debate: platforms per marketplace side, customisation level, integration audit, growth channel and AI ambitions. Once those are written down, the framework usually picks itself.&lt;/p&gt;

&lt;p&gt;If you'd rather work with a team that has shipped this before, Journeyhorizon offers &lt;a href="https://www.journeyh.io/services/flutter-mobile-app-development" rel="noopener noreferrer"&gt;Flutter mobile app development for marketplaces&lt;/a&gt; that pairs the build with a growth plan.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>reactnative</category>
      <category>mobile</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
