How to Build a Long‑Term Supply Contract with Indonesian Coffee Farms
Indonesian coffee price differentialICE C pricearabica differentialLondon Robusta pricequality premium coffeeprice floor ceilingFX risk IDR USDFOB Medan pricingSCA score premiumcoffee contract template

How to Build a Long‑Term Supply Contract with Indonesian Coffee Farms

8/17/20259 min read

A practical, plug‑and‑play price clause you can paste into your Indonesian coffee contract today. We show how to link fairly to ICE C or London Robusta, set origin differentials, use JISDOR for FX, add floor/ceiling, and tie premiums/discounts to measurable quality. Includes example calculations and common pitfalls to avoid.

If you’ve ever had a coffee deal fall apart at pre‑shipment because the market moved or a cupping score came in lower than expected, you know why a clean pricing clause matters. We’ve used the template below for years across Sumatra, Java, and Bali. It keeps both sides whole. And it’s simple enough for your legal team to sign off without adding ten pages.

Here’s the thing. Most pricing disputes aren’t about bad faith. They’re about ambiguity. So let’s remove the ambiguity.

The 3 pillars of a fair, durable price formula

  1. Transparent index link. Use ICE C for arabica and London Robusta for robusta. Define the exact contract month and the exact time you lift the price.

  2. Origin differential plus measurable quality adjustments. Set the base differential by origin and process. Then add a published premium/discount schedule tied to SCA score, moisture, and defects. No surprises, only math.

  3. Risk rails. Include a floor/ceiling, carry charges by shipment month, and a precise FX conversion using Bank Indonesia’s JISDOR if you’ll settle in IDR.

Our experience shows that when these three are explicit, long‑term farm partnerships survive volatile markets. Three stone pillars carved with coffee leaves and cherries stand on a patio beside a cupping setup, with green coffee sacks and an Indonesian highland landscape and volcano in the background at golden hour.

Week 1–2: Research and validation (pick your anchors)

  • Choose the reference: Arabica links to ICE C (second nearby) and robusta links to London Robusta (second nearby). If your sales cycle is long, specify a named month instead of “second nearby.”
  • Set realistic origin differentials. For 2025 guidance we’re seeing, in our own trades and peer quotes:
    • Sumatra arabica wet‑hulled Grade 1 (Gayo/Lintong/Mandheling, SCA 82–84): typically +10 to +30 c/lb FOB Belawan/Medan. Top microlots can run higher.
    • Java/Bali fully washed Grade 1: often +15 to +40 c/lb depending on scarcity and profile.
    • Indonesian robusta (Lampung ELB, clean prep): commonly +50 to +200 USD/MT vs London, quality and moisture dependent.
  • Validate against real offers. If you’re buying Sumatra Lintong Green Coffee Beans (Lintong Grade 1), your differential will be different than a fully washed Arabica Java Ijen Grade 1 Green Coffee Beans lot. Apples to apples.

Practical takeaway: write down your intended index, month, and a differential range that matches the specific product and port. FOB Belawan/Medan for Sumatra. FOB Surabaya for Java/Bali. Logistics costs differ, so the differential should reflect the port named in your Incoterm.

Week 3–6: Draft the clause and test it with real numbers

Below is a fill‑in‑the‑blanks clause we use. Keep it as bullets in your contract so both sides can scan it quickly.

Pricing clause template (Arabica)

  • Reference: Price equals [ICE C Arabica Futures] settlement price for the [Second Nearby] contract month on the Pricing Date, in USD cents per pound.
  • Origin differential: plus [__] c/lb, FOB [Belawan/Medan or Surabaya].
  • Quality premium/discount:
    • SCA score at Pre‑Shipment Inspection (PSI): Base 82 = 0.00 c/lb. 83 = +1.5 c/lb. 84 = +3.0 c/lb. 85 = +6.0 c/lb. 86 = +10.0 c/lb. Below 82: −2.0 c/lb per point to 80, then buyer may reject or renegotiate.
    • Moisture at PSI (SCA method): Target 11.0–12.5% = 0.00. 12.6–13.0%: −0.40 c/lb per 0.1%. >13.0%: buyer may reject. ≤10.5%: −0.30 c/lb per 0.1% (brittleness/weight loss risk).
    • Defects (SCA full defects per 300 g): Base 0–8 = 0.00. 9–20: −0.50 c/lb per defect over 8. >20: buyer option to reject or renegotiate.
  • Floor and ceiling: Net price bounded by Floor [] c/lb and Ceiling [] c/lb.
  • Carry: Ship period base [Month/Year]. Add/Subtract Carry Charge [±0.__ c/lb] per calendar month difference between base month and actual shipment BL date. Carry applies to net price after quality adjustments.
  • Pricing Date: [specify], at [time] New York time. If market closed/holiday, use the preceding ICE settlement day. If ICE unavailable, use the arithmetic average of the prior five settlement days.
  • Payment currency and FX: Contract in USD. If paid in IDR, convert at Bank Indonesia JISDOR rate published at 10:00 WIB on the business day preceding the invoice date. If JISDOR unavailable, use the last published JISDOR.
  • Tolerances: Standard lot specs apply to [screen size, process, certification]. Lots outside tolerance trigger the defined discounts or rejection right.

Robusta variant (key edits)

  • Reference: London Robusta Futures (ICE Europe), second nearby, in USD/MT.
  • Differential: plus [__] USD/MT FOB [Belawan/Medan or Panjang].
  • Moisture schedule in USD/MT: set $/MT per 0.1% rather than c/lb.
  • Quality: use your agreed Lampung ELB or Grade 2–4 target and defect count conversion.

Now test it. Two worked examples with real math:

Example A: Washed Sumatra arabica, FOB Medan

  • Product: Sumatra Lintong Green Coffee Beans (Lintong Grade 1)
  • ICE C settlement on pricing date: 162.30 c/lb
  • Differential: +18.0 c/lb
  • SCA: 84 = +3.0 c/lb
  • Moisture: 12.3% = 0.00
  • Defects: 10 full defects = 2 over base = −1.0 c/lb
  • Net before rails: 162.30 + 18.0 + 3.0 − 1.0 = 182.30 c/lb
  • Floor/Ceiling: 150/220 c/lb. Net within rails, so 182.30 c/lb stands.
  • USD/MT equivalent: 1 c/lb ≈ 22.046 USD/MT. 182.30 c/lb ≈ 4,020 USD/MT FOB Medan.

Example B: Lampung robusta ELB, FOB Panjang

  • Product: Robusta Lampung Green Coffee Beans (ELB & Grades 2–4)
  • London Robusta settlement: 2,650 USD/MT
  • Differential: +120 USD/MT
  • Moisture: 12.9%. Base 11.5–12.5 = 0.00. Above 12.5 deduct 5 USD/MT per 0.1% = 20 USD/MT deduction.
  • Net: 2,650 + 120 − 20 = 2,750 USD/MT FOB Panjang.

Practical takeaway: When both sides can replicate the math in under a minute, trust goes up. Disputes go down.

Week 7–12: Scale and optimize (floor/ceiling, shipment timing, FX)

Here’s where we see smart buyers and co‑ops lock in longevity.

  • Floors and ceilings that protect both sides. If you’re sourcing Grade 1 washed arabica from Bali or Java, a floor at your cost‑of‑sustainable‑production plus overhead makes sense for farmers. A ceiling prevents your retail math from breaking during spikes. In our experience, floors within 130–160 c/lb and ceilings within 220–280 c/lb are common for mainstream Grade 1 Indonesian arabicas. Microlots justify higher rails.
  • Shipment period carry. If your base is June but you ship in August because the co‑op staggered pickings, agree a neutral carry like +0.30 to +0.80 c/lb per month for arabica. It keeps planning honest.
  • FOB port clarity. Sumatra lots priced FOB Belawan/Medan can’t be lifted in Surabaya without adjusting trucking and port costs. State the port in the differential line. For Java/Bali, FOB Surabaya is the common anchor for Arabica Bali Kintamani Grade 1 Green Coffee Beans or Arabica Java Ijen Grade 1 Green Coffee Beans.
  • FX risk: IDR vs USD. If you invoice in IDR but index to USD markets, use JISDOR. Specify “Bank Indonesia JISDOR at 10:00 WIB on the business day preceding invoice date.” Don’t use “mid‑market” generically. It’s ambiguous.

Practical takeaway: Rails and timing language are where most contracts silently fail. Write them in everyday language and add simple numbers.

Answers to the questions we get most

How do I link Indonesian coffee prices to the ICE C market fairly?

Define the ICE C contract month and settlement timing. Use second nearby for rolling shipments, or a named month for fixed windows. Add a fixed origin differential that reflects FOB port and process, then layer quality adjustments that are measured at PSI. Fairness comes from transparency and repeatability.

What’s a reasonable differential for Sumatra arabica in 2025 contracts?

For Grade 1 wet‑hulled Sumatra (Mandheling/Lintong/Gayo) at SCA 82–84, we’re commonly seeing +10 to +30 c/lb FOB Belawan/Medan. Washed microlots and peaberries can run higher. Link real product and port. For example, Sumatra Mandheling Green Coffee Beans will often price differently than Blue Batak Green Coffee Beans.

How do I set a price floor and ceiling that protects both sides?

Price your floor near cost‑of‑production plus community premiums and logistics. Set the ceiling near the point where your roast program’s margin compresses unacceptably. Then sanity‑check both against three years of historical ICE C settlements plus your differential. Cap it with carry charges so shipment timing doesn’t game the rails.

Which exchange rate should I use when paying in IDR for a USD‑priced coffee contract?

State it explicitly: Bank Indonesia’s JISDOR at 10:00 WIB on the business day before invoice date. Add a fallback to “last published JISDOR” if the day is a holiday.

How do I write a quality premium/discount schedule tied to SCA scores, moisture, and defects?

Keep it linear and capped. The schedule above works well in practice: step premiums for 83–86, linear moisture discounts beyond 12.5%, and 0.5 c/lb per full defect above 8, capped at 10 c/lb. Above hard limits (e.g., >13.0% moisture or >20 full defects), give the buyer an explicit rejection right.

What happens if my pricing date is a holiday or the futures market is closed?

Use the prior settlement day. If the index is unavailable, default to the arithmetic average of the previous five settlement days. That’s objective, auditable, and both sides can reproduce it.

Should Indonesian robusta be indexed to London Robusta or negotiated as a fixed price?

If you’re running multi‑month programs, index to London and set a USD/MT differential plus a moisture/defect schedule. For spot purchases, fixed price can be fine. The key is keeping moisture penalties explicit for Lampung ELB and Grade 2–4 lots.

The 5 mistakes that blow up coffee price clauses

  1. Vague “market price” language. Without naming ICE C or London, and the exact settlement used, you’ll disagree later.
  2. Missing port and Incoterm. FOB Medan vs FOB Surabaya are not interchangeable.
  3. No quality math. “Subject to quality” without a schedule equals renegotiation at PSI.
  4. Ignoring carry. Shipment slippage happens. Without carry, someone pays silently.
  5. Ambiguous FX. “Bank rate” or “mid‑market” won’t cut it. Use JISDOR.

Resources and next steps

Paste the template above into your draft and run two price scenarios with your team. If you need help tailoring differentials for specific Indonesian origins or want us to sanity‑check your floor/ceiling math, feel free to Contact us on whatsapp. And if you’re aligning specs with actual supply, you can browse current Indonesian lots and cup profiles here: View our products.

In our experience, once the price formula is this clear, long‑term supply contracts stop being a gamble and start feeling like a partnership. That’s the point.