Build the schedule in a spreadsheet with one row per item and fields for specification, supplier, quantity, unit price, lead time and status. Let AI extract specification text from supplier documents and audit the sheet. Keep totals as formulas, never AI output, and confirm every price against a current supplier quote.
An FF&E schedule (furniture, fixtures and equipment) is the list the whole project buys from. A wrong quantity or a stale price becomes a purchase order, and a purchase order is hard to take back. AI saves time on the typing and the checking, but only if the structure forces it into the right cells and the arithmetic stays in formulas.
The columns that make a schedule buyable
Published templates agree on a core. Programa's procurement guide lists item codes, descriptions, materials, finishes, vendor details, quantities and unit costs, with model numbers, lead times, purchase order dates, arrival and install dates and a status. MASTT's FF&E schedule page adds room locations, dimensions and product images, and its FAQ says a schedule should include installation labour, delivery fees and special access requirements. The set below combines both, and the last column says who fills each one, because that decides what AI is allowed to touch.
| Column | What it holds | Filled by |
|---|---|---|
| Item code | A short unique code: room, category, number (LNG-01) | You |
| Room | Where the item goes | You |
| Description | One line saying what it is | AI drafts from the quote, you check |
| Supplier and model | Maker, product name, model or reference | AI extracts, you verify |
| Finish and fabric | Wood species, colour code, fabric name; COM (customer's own material) where used | AI extracts, you verify |
| Dimensions | Width, depth and height in one unit | AI extracts; [CHECK] if missing |
| Quantity and unit | How many, and each, pair or metre | You, from the drawings |
| Trade unit price | The supplier's price to you | From the quote |
| Client unit price | Trade price plus your markup | Formula |
| Extended price | Quantity multiplied by unit price | Formula |
| Delivery and installation | Freight, carry-in, access, fitting labour, minimum order | From the quote |
| Lead time (weeks) | The supplier's stated time from order, with "approx" noted | From the quote |
| Quote ref and valid-until | Which quote the price came from and when it lapses | From the quote |
| Client approval | Proposed, approved, changed or dropped | You, from a drop-down |
| Procurement status | Pending, ordered, in production, shipped, delivered, installed | You, from a drop-down |
| PO date, ETA, install date | Dates for tracking each purchase | You, with formula checks |
| Revision and change note | Which version last changed the row, and why | You |
Splitting approval from procurement status matters more than it looks. A sofa can be approved by the client and still pending an order, and the two facts drive different conversations. Notice also how the "filled by" column divides the work. The extractable fields can go to an assistant, the decisions (quantities, approvals, dates) stay with you, and the price columns that follow from other columns are formulas, not text.
A worked schedule: twelve lines from a two-bedroom apartment
Say a studio is furnishing a two-bedroom apartment, and the full schedule runs to 31 lines. Here are the first twelve, enough to show the structure and the checks. Every price, supplier letter and lead time is illustrative, and prices are the trade prices quoted to the studio.
| Code | Room | Item | Supplier | Qty | Unit | Extended | Lead (wks) | Approval |
|---|---|---|---|---|---|---|---|---|
| LNG-01 | Living | Three-seat sofa, oak frame, bouclé | A | 1 | $2,450 | $2,450 | 12 | Proposed |
| LNG-02 | Living | Armchair, same fabric | A | 2 | $890 | $1,780 | 12 | Proposed |
| LNG-03 | Living | Coffee table, solid oak | B | 1 | $640 | $640 | 6 | Approved |
| LNG-04 | Living | Floor lamp, brass | C | 2 | $215 | $430 | 4 | Approved |
| DIN-01 | Dining | Dining table, 1.8 m, oak | B | 1 | $1,380 | $1,380 | 8 | Approved |
| DIN-02 | Dining | Dining chair | B | 6 | $185 | $1,110 | 8 | Approved |
| BD1-01 | Bedroom 1 | King bed frame | D | 1 | $1,150 | $1,150 | 10 | Proposed |
| BD1-02 | Bedroom 1 | Bedside table | D | 2 | $260 | $520 | 10 | Proposed |
| BD1-03 | Bedroom 1 | Curtains, lined, made to measure (per pair) | E | 2 | $480 | $960 | 5 | Proposed |
| BD2-01 | Bedroom 2 | Single bed frame | D | 1 | $620 | $620 | 10 | Proposed |
| BTH-01 | Bathroom | Mirror cabinet | F | 1 | $390 | $390 | 3 | Approved |
| HAL-01 | Hall | Console table | C | 1 | $540 | $540 | 4 | Approved |
Every number in the Extended column and every total comes from a formula, so you can see exactly how each was reached. With the columns above in A to I (quantity in E, trade unit price in F, extended in G) and two client columns added in J and K, the cells look like this.
G2 =E2*F2 extended trade price
J2 =ROUND(F2*(1+Markup),2) client unit price (Markup is a named cell)
K2 =E2*J2 client extended price
Living subtotal =SUMIFS(G:G,B:B,"Living")
Grand total =SUM(G2:G13)
Check cell =SUM(room subtotals)-SUM(G2:G13) must equal 0
The room subtotals come to $5,300 for the living room, $2,490 for dining, $2,630 for bedroom 1, $620 for bedroom 2, $390 for the bathroom and $540 for the hall, which adds to $11,970. At an illustrative 30% markup (your own business decision), the client total is $11,970 x 1.3 = $15,561. The check cell is not decoration. If someone inserts a row outside the summed range, or types over a formula with a number, it stops reading 0.

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowGetting specifications in: from supplier quotes to rows
Typing specifications out of quotes and brochures is the dullest part of the job, and the part where an assistant is both quickest and most dangerous. A quote that doesn't mention depth will still get a depth if you let it. The rule is to use only the pasted text, to write [CHECK] where the text is silent, and never to suggest substitutes while extracting.
Quote Q-2291, 24 Feb, valid 30 days. Arden sofa 3 seat, oak frame, boucle "Ecru"
(our fabric), W2100 x D950 x H800mm, 1 off @ 2450.00. Lead time approx 12 weeks
from order. Armchair as above, W860mm, 2 off @ 890.00. Delivery 180.00 to site,
2-man carry in.
Extract every item from the supplier quote below into a table with columns:
product, finish and fabric, width, depth, height (mm), qty, unit price, lead time
(as written), delivery. Use ONLY the quote text. If a field is not in the text,
write [CHECK]. Keep words such as "approx" exactly as written. Do not suggest
alternatives, and do not convert units or currencies.
Quote: [paste]
The reply (illustrative) is a tidy two-row table, and one row is wrong.
| Product | Finish and fabric | W x D x H (mm) | Qty | Unit | Lead time |
|---|---|---|---|---|---|
| Arden sofa, 3 seat | Oak frame; bouclé, Ecru | 2100 x 950 x 800 | 1 | $2,450 | 12 weeks |
| Arden armchair | Oak frame; bouclé, Ecru | 860 x 900 x 820 | 2 | $890 | 12 weeks |
The quote gives the armchair a width and nothing else. The depth of 900 and height of 820 are plausible numbers that appear nowhere in it, and the finish was carried across from the sofa on the strength of "as above". Both belong to [CHECK] until the supplier confirms. The lead time has also lost its "approx", so the column now claims more certainty than the supplier gave, and the $180 delivery charge has dropped out altogether although the prompt asked for it. A delivery line that never reaches the schedule comes out of your margin. None of that is visible in a clean table, which is why the prompt asks for [CHECK] and why you read every extracted row against the quote once, with a finger on the page.
If you upload a brochure PDF instead of pasting text, send only the pages you need. As of September 2026, Claude reads PDFs of up to 1,000 pages but analyses the visual layout only up to 100 pages, and ChatGPT has its own file-size limits, so check the current numbers for the tool you use. A 200-page catalogue is easier to read, for you and for the model, when it's trimmed to the six pages that matter. In Google Sheets, Gemini's AI function can tidy a column of descriptions, 350 cells at a time. It can't be nested and doesn't refresh on its own, so use it for one-off cleaning, and see Google Sheets AI prompts for what it does well. Excel's COPILOT function was retired on 14 September 2026, but the Copilot side pane remains, and the ChatGPT and Excel guide covers pasting tables into a chat instead.
Let formulas add and let AI audit: the totals check
Long tables are where assistants add badly and where people stop reading. So the audit prompt never asks for totals. It asks for row-by-row comparisons and gives the cell addresses, so you can go straight to the problem. Suppose that after a week of edits the export has picked up some slips: DIN-02's extended price was typed over as $1,011, a table lamp was added with the same code as the floor lamp (LNG-04), BD2-01's finish was deleted, HAL-01 has no dimensions, BD1-02's description says oak while its finish column says walnut, and the drawings show eight dining chairs against the six in the schedule.
Below is my FF&E schedule as CSV, today's date (2 March), the install window start
(18 May) and the item counts shown on the drawings. Do NOT recalculate any totals.
Check every row and list: (1) rows where quantity x unit price does not equal the
extended price, (2) duplicate item codes, (3) blank cells in finish, dimensions,
supplier or lead time, (4) rows where order date plus lead time lands after the
install window start, (5) rows where quantity differs from the drawing count,
(6) rows where the description contradicts the finish column. Give the item code
and the cells involved. Say "none" for an empty category.
1. Extension mismatch: DIN-02. 6 x $185 = $1,110, but extended shows $1,011.
2. Duplicate codes: LNG-04 appears twice (floor lamp, table lamp).
3. Blanks: BD2-01 finish; HAL-01 dimensions.
4. Lead time: LNG-01 and LNG-02 (12 weeks) arrive on 25 May, after the 18 May window.
5. Quantity differs from drawings: DIN-02 has 6; drawings show 8.
6. Description versus finish: BD1-02 says oak, finish column says walnut.
Six findings, each with a cell to look at. The first four categories are mechanical, and a formula can catch them for free every time the sheet changes, so put the formulas in a check column instead of paying for an audit on each pass.
Extension check =IF(ROUND(E2*F2,2)<>G2,"CHECK","")
Duplicate code =IF(COUNTIF(A:A,A2)>1,"DUPLICATE","")
Blank cells =IF(COUNTBLANK(M2:N2)>0,"BLANK","") finish in M, dimensions in N
Late arrival =IF(OrderDate+H2*7>InstallStart,"LATE","") OrderDate and InstallStart are named cells
What the assistant adds are the checks a formula can't make: a description that contradicts a finish, a unit that changed between rows, a model number missing on an approved item. Use the formulas continuously and the assistant's read before each issue to the client. Its date arithmetic deserves the same suspicion as its sums. In the example, 2 March plus 12 weeks is 25 May, which is right, but confirm it with the late-arrival formula before you phone a supplier about it. If you want the assistant to also check supplier quotes line by line against the schedule, checking trade quotes against your schedule covers that workflow.
A lead-time check that catches the sofa
Lead time is where a schedule quietly fails. The sofa is approved on a Friday, ordered the following week, and arrives after the painters have left. Turn the install window into order-by dates instead: install start, minus the lead time, minus a buffer for delivery. With an 18 May window start and a one-week buffer (your own choice), the formula is =InstallStart-(H2+1)*7, with H2 holding the lead time in weeks. On 2 March the schedule reads like this.
| Items | Lead time | Latest order date | Position on 2 March |
|---|---|---|---|
| LNG-01, LNG-02 (sofa, armchairs) | 12 weeks | 16 Feb | 14 days overdue |
| BD1-01, BD1-02, BD2-01 (beds, bedside tables) | 10 weeks | 2 Mar | Order today |
| DIN-01, DIN-02 (table, chairs) | 8 weeks | 16 Mar | 14 days left |
| LNG-03 (coffee table) | 6 weeks | 30 Mar | 28 days left |
| BD1-03 (curtains) | 5 weeks | 6 Apr | 35 days left |
| LNG-04, HAL-01 (lamp, console table) | 4 weeks | 13 Apr | 42 days left |
| BTH-01 (mirror cabinet) | 3 weeks | 20 Apr | 49 days left |
The sofa and armchairs should have been ordered on 16 February, so at the quoted 12 weeks they can't make the window. That is a conversation to have now: ask Supplier A for a firm ship date in writing, offer the client a stock alternative, or move the installation. The beds are the other warning, because they are still only proposed and their order-by date is today. Anything proposed with an order-by date inside two weeks goes to the top of the next client conversation.
Programa's guide lists purchase order date, vendor acknowledgement, production start and ship dates, and the expected arrival and installation windows as tracking points. The acknowledgement is worth its own status step, because an order isn't safe until the supplier has confirmed it and restated the lead time in writing. For the wider timeline of phases around these dates, timelines and lead times with AI goes further.
Once the dates are in the sheet, the assistant's job is a client message built from the table, with dates copied exactly: "Please approve the beds and bedside tables today so they arrive for the 18 May installation, and the dining furniture by 16 March." Watch for softening. A draft that says "by the end of the week" for the beds, when the table says today, has quietly removed the urgency the whole exercise exists to show.
Price checks: the schedule is only as good as the quote behind it
An assistant can't know today's price, so never ask it for one. Every price in the schedule comes from a supplier quote, with the quote reference and a valid-until date in the same row. A formula such as =IF(ValidUntil<TODAY(),"EXPIRED","") flags the lapsed ones, and before each purchase order you confirm the price in writing. A unit price also isn't the whole price. Programa's guide says to weigh minimum order quantities, shipping costs and installation fees alongside it, and MASTT's FAQ says a schedule should allow for installation labour, delivery fees and access requirements.
| Code | Schedule unit price | Supplier's latest quote | Valid until | Status on 2 March |
|---|---|---|---|---|
| LNG-01 | $2,450 | $2,450 | 26 Mar | Confirmed |
| DIN-02 | $185 | $195 | 15 Mar | Price is $10 higher, which is $60 on six chairs; update the schedule |
| LNG-04 | $215 | $215 | 28 Feb | Expired; ask for a fresh quote |
| BD1-03 | $480 | $480 | 20 Mar | Confirmed |
The chair increase is a good example of how a small change travels. At a 30% markup the $60 trade difference becomes $78 on the client's price (60 x 1.3), and because the chairs were already approved, the client needs to hear about it before the order goes in. If you want the assistant's help here, give it the quote lines and the schedule rows and ask it to list the differences, the expired quotes and any quote line that isn't in the schedule. Don't ask it what the chairs cost.
Change tracking: versions, a change log and the note to the client
Save a snapshot of the schedule each time you issue it, named v3, v4 and so on. Programa's guide puts the reason bluntly: without regular snapshots you can't audit how budgets or schedules shifted over time. A change tab then compares versions by item code, so the figures come from the two sheets and nobody types a difference by hand.
v3 extended for the same code =XLOOKUP(A2,V3!A:A,V3!G:G,0)
Change in trade price =G2-(v3 extended for the same code)
Change in client price =ROUND(change in trade price*(1+Markup),2)
Between v3 and v4, the client drops one armchair, swaps the oak coffee table for a marble one at $920, adds a rug at $720, and loses the hall console table. Run the lookup in both directions, v4 against v3 and v3 against v4, because a dropped item has no row in v4 to start from and would otherwise never appear. Here's what the change tab shows.
| Code | Change | Trade effect | Client effect at 30% |
|---|---|---|---|
| LNG-02 | Armchairs reduced from 2 to 1 | -$890 | -$1,157 |
| LNG-03 | Oak coffee table ($640) replaced by marble ($920) | +$280 | +$364 |
| LNG-05 | New item: rug | +$720 | +$936 |
| HAL-01 | Console table dropped | -$540 | -$702 |
| Net change | -$430 | -$559 |
The client total moves from $15,561 to $15,002. The assistant's job is the note that explains it, and the prompt has to keep trade figures out of it: "Write a short note listing what changed between version 3 and version 4. Use only the client effect column, copy figures exactly, and never mention trade prices or markup." A first draft can easily say "a net saving of $430". That is the trade figure, and set beside the client's own total it tells them your markup. The number they should see is $559. Mark every changed row "Changed" in the approval column too, so the client signs off on exactly those lines and nothing else.
Beyond the apartment: café seating and nursery paperwork
The apartment above is the base set-up: one schedule per project, one tab per version, and a client view that carries only the client price columns, never the trade ones. Replace the client's name with a project code before anything leaves the sheet, so the chat can be pasted into a team document without a privacy problem. Two other project types change what you check.
A café front of house
The item count is high and the same chair appears 24 times, so a cross-row check earns its keep. Take a table schedule with six two-seat tables and two four-seat tables, which seat 6 x 2 + 2 x 4 = 20, against an order for 24 chairs. Ask the assistant to compare seats with chairs and it flags the gap of four. That is either a deliberate spares allowance or a miscount, and only the designer knows which. Make the answer a visible line ("4 spare chairs, agreed with the owner") instead of leaving an unexplained surplus.
A childcare nursery fit-out
Nursery projects add paperwork to each line: product data sheets, and any safety or fire-performance documents the client's inspector or your own policy requires. Add a "documents received" column, and ask the assistant to list approved items whose document cell is blank. Which documents are needed comes from the client, the inspector or your policy, never from the assistant. The column just makes the gaps visible before delivery day rather than after it.
Where drafts go wrong on FF&E
- Invented specifications. A missing depth or finish gets filled with something plausible. The [CHECK] rule exists for this.
- Substitutes dressed as selections. Ask for "a similar chair" and you may get a product that is discontinued or never existed. Keep candidates on their own list until a supplier page or quote confirms them.
- Unit drift. 860 mm becomes 86 cm becomes 33.9 inches as text moves between tools. Fix one unit in the column header and say so in every prompt.
- Merged variants. Two fabrics on the same sofa model collapse into one row, and a price difference vanishes with them. Keep one row per variant.
- Pasted totals. A total copied from a chat reply doesn't update when the sheet does. Totals live in formulas, and anything quoted to a client comes from the sheet.
When the spreadsheet starts to creak, usually with several projects open and many suppliers, interior designer software compared sets out where a purpose-built tool earns its fee. Until then, one well-built sheet with the checks above does most of the job, and ten ChatGPT prompts for interior designers has more prompts for the briefs and client messages that surround it.
FF&E schedule questions, answered
Which columns does an FF&E schedule need?
At least an item code, room, description, supplier, model, finish, dimensions, quantity, unit price, extended price and lead time. Published templates add quote details, status values such as pending, in production, shipped, delivered and installed, and dates for the purchase order, arrival and installation. Add delivery, installation and access notes if your quotes carry them.
Can AI calculate the totals?
Don't let it. Totals belong in spreadsheet formulas that you can see and audit. Use AI to write those formulas, to explain them, and to look for rows where quantity times unit price doesn't equal the extended figure. Arithmetic done in a chat reply over a long table is where quiet errors creep in.
How do I stop AI inventing product details?
Tell it to use only the pasted text and to write [CHECK] wherever the text is silent, especially for dimensions, finishes and lead times. Keep any suggestions for alternative products on a separate candidate list, and never let a candidate into the schedule until you've verified it on the supplier's own page or quote.
How often should prices be re-verified?
Whenever a quote's validity date passes, and again in writing before you raise each purchase order. Record the quote reference and its valid-until date beside every price, and let a formula flag the ones that have expired. A price in the schedule is only as good as the quote behind it.
Is it safe to upload supplier quotes and client names to an AI chat?
Remove client names and addresses first, and remember that trade prices are commercially sensitive. Consumer ChatGPT and Claude plans have a switch for model training in privacy settings, and business plans don't train on content by default. A project code instead of a client name keeps the schedule useful and the client out of the chat.
Further reads
- Interior Design Proposal Template: Scope, Fees and Phases With ChatGPT — Scope, fees and phases before the schedule exists.
- Can AI Draft an Interior Design Contract? Terms a Solicitor Checks — Contract terms for orders and deposits, and what a solicitor checks.
- AI for Architects and Interior Designers: Who Does What on a Joint Job — Who does what when a designer and architect share a job.
- How to Price Interior Design Services: Compare Fee Models With AI — How your fee model changes what the schedule must show.
- AI for Interior Design Studio Admin: Sourcing, Quotes, Updates — Sourcing, quotes and client updates around the schedule.
- Best AI for Interior Design Mockups: Client-Ready Images for a Studio — A six-step studio workflow from a client's room photo to an approved concept image: permissions, prompts, a scale check, labelling and a one-page sign-off.
- ChatGPT for Designers: Turning Client Feedback Into Revision Plans — Prompts and wording for freelance designers: sort a feedback round into a revision plan, send the client a summary, and flag extra work politely.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: public FF&E schedule guidance from Programa and MASTT (fetched 1 November 2026); vendor documentation on Gemini in Sheets, Excel Copilot and file upload limits (checked September 2026); privacy defaults as published by OpenAI and Anthropic for their plans (checked September 2026). Prices, quantities and dates in the worked example are illustrative.