{"asOf":"2026-10-03","doesNotChangeDepotPicks":true,"doesNotChangePriceSort":true,"doesNotRescore":true,"caps":{"needs":6,"freePerNeed":3,"caseStudies":3},"class":{"id":"data-etl","name":"Data and ETL agent","definition":"Moves or reshapes records between files, tables, and documents, and reports rows that did not match the schema.","needs":{"jtbdIds":["lakehouse-llm","sql-warehouse-agent-context","spreadsheet-sql-agents","document-parse","knowledge-graph-extract","ml-dataset-versioning","layout-aware-ocr"],"freeKinds":["free_ocr","free_data"],"capabilityTags":["sql"],"plain":["A schema for the destination","A row-level error report"]},"failureModeIds":["schema-drift","partial-tool-success","silent-truncation","stale-retrieval","hallucinated-tool-args","collateral-side-effects"],"exampleTasks":["Load a table and list rows that failed the schema","Parse a document and mark pages the OCR step did not return"]},"needsConsidered":["lakehouse-llm","sql-warehouse-agent-context","spreadsheet-sql-agents","document-parse","knowledge-graph-extract","ml-dataset-versioning"],"needsOmitted":["layout-aware-ocr"],"jobs":[{"jtbdId":"lakehouse-llm","decide":{"available":true,"unavailableReason":null,"providerId":"databricks-mosaic","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"snowflake-cortex","cite":"Depot Pick for lakehouse-llm: databricks-mosaic (asOf 2026-09-14). See GET /api/jtbds/lakehouse-llm + GET /api/methodology.","citePath":"/api/jtbds/lakehouse-llm"},"quote":{"available":true,"unavailableReason":null,"cheapest":{"providerId":"amazon-bedrock","slug":"amazon-bedrock","name":"Amazon Bedrock","skuId":"amazon-bedrock-gemma-3-4b-in","sku":"Gemma 3 4B","item":"Gemma 3 4B","plan":"Gemma 3 4B — Standard on-demand","isFloorPrice":true,"floorWarning":"Provider-wide floor SKU; may not be the flagship model scored for this JTBD.","skuKind":"chat_completion_input","unit":"usd_per_million_input_tokens","amountUsd":0.04,"comparison":"min sourced input SKU among candidates; not quality-adjusted","usdPerMillionInputTokens":0.04,"sourceUrl":"https://aws.amazon.com/bedrock/pricing/","asOf":"2026-10-03"},"recommendedWorkloadQuote":null,"representativeQuote":null,"estimatedTaskCost":null,"reason":null,"priceWinnerNote":"Pick is not a price winner. Cheapest sourced input $/1M among candidates is amazon-bedrock at 0.04. The pick has no priceSortEligible input row."},"pickIsNotPriceWinner":true,"freeResources":[],"freeMatch":"none","paidPick":{"available":true,"unavailableReason":null,"providerId":"databricks-mosaic","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"snowflake-cortex","cite":"Depot Pick for lakehouse-llm: databricks-mosaic (asOf 2026-09-14). See GET /api/jtbds/lakehouse-llm + GET /api/methodology.","citePath":"/api/jtbds/lakehouse-llm"},"recommendation":{"mode":"free_only","use":[],"gap":"no_free_resource_for_job","creditsNotFree":[],"doesNotPromotePaidSku":true}},{"jtbdId":"sql-warehouse-agent-context","decide":{"available":true,"unavailableReason":null,"providerId":"motherduck","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"snowflake-cortex","cite":"Depot Pick for sql-warehouse-agent-context: motherduck (asOf 2026-10-19). See GET /api/jtbds/sql-warehouse-agent-context + GET /api/methodology.","citePath":"/api/jtbds/sql-warehouse-agent-context"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":{"providerId":"motherduck","providerName":"MotherDuck","skuId":"motherduck-lite","item":"Lite","plan":"Lite — Up to 3 users, 10 GB, 10 Pulse hours/mo included","unit":"usd_per_month","amountUsd":0,"outputSkuId":null,"outputItem":null,"outputAmountUsd":null,"outputUnit":null,"sourceUrl":"https://motherduck.com/product/pricing","asOf":"2026-10-03","pricingLastVerifiedAt":"2026-10-27","isFlagshipForJob":true,"differsFromFloorCheapest":false,"representativeQuote":{"skuId":"motherduck-lite","item":"Lite","plan":"Lite — Up to 3 users, 10 GB, 10 Pulse hours/mo included","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://motherduck.com/product/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."}},"representativeQuote":{"skuId":"motherduck-lite","item":"Lite","plan":"Lite — Up to 3 users, 10 GB, 10 Pulse hours/mo included","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://motherduck.com/product/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."},"reason":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[{"id":"duckdb","name":"DuckDB","kind":"dev_tool","cost":"oss","substitutable":true,"sourceUrl":"https://github.com/duckdb/duckdb/blob/main/LICENSE"}],"freeMatch":"jtbd","paidPick":{"available":true,"unavailableReason":null,"providerId":"motherduck","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"snowflake-cortex","cite":"Depot Pick for sql-warehouse-agent-context: motherduck (asOf 2026-10-19). See GET /api/jtbds/sql-warehouse-agent-context + GET /api/methodology.","citePath":"/api/jtbds/sql-warehouse-agent-context"},"recommendation":{"mode":"free_only","use":[{"id":"duckdb","name":"DuckDB","kind":"dev_tool","cost":"oss","substitutable":true,"sourceUrl":"https://github.com/duckdb/duckdb/blob/main/LICENSE"}],"gap":null,"creditsNotFree":[],"doesNotPromotePaidSku":true}},{"jtbdId":"spreadsheet-sql-agents","decide":{"available":true,"unavailableReason":null,"providerId":"motherduck","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"duckdb","cite":"Depot Pick for spreadsheet-sql-agents: motherduck (asOf 2026-10-19). See GET /api/jtbds/spreadsheet-sql-agents + GET /api/methodology.","citePath":"/api/jtbds/spreadsheet-sql-agents"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":{"providerId":"motherduck","providerName":"MotherDuck","skuId":"motherduck-lite","item":"Lite","plan":"Lite — Up to 3 users, 10 GB, 10 Pulse hours/mo included","unit":"usd_per_month","amountUsd":0,"outputSkuId":null,"outputItem":null,"outputAmountUsd":null,"outputUnit":null,"sourceUrl":"https://motherduck.com/product/pricing","asOf":"2026-10-03","pricingLastVerifiedAt":"2026-10-27","isFlagshipForJob":true,"differsFromFloorCheapest":false,"representativeQuote":{"skuId":"motherduck-lite","item":"Lite","plan":"Lite — Up to 3 users, 10 GB, 10 Pulse hours/mo included","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://motherduck.com/product/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."}},"representativeQuote":{"skuId":"motherduck-lite","item":"Lite","plan":"Lite — Up to 3 users, 10 GB, 10 Pulse hours/mo included","amountUsd":0,"inputOrUnitUsd":0,"unit":"usd_per_month","outputUsd":null,"outputUnit":null,"sourceUrl":"https://motherduck.com/product/pricing","asOf":"2026-10-03"},"estimatedTaskCost":{"tasks":1000,"retryAndToolOverheadMultiplier":1.15,"retryToolOverheadMultiplier":1.15,"unitsPerTask":1,"baseCostPer1kTasksUsd":0,"totalUsd":0,"estimatedTotalUsd":0,"perTaskUsd":0,"estimatedCostPerTaskUsd":0,"formula":"Monthly base plan $0/mo covering 1,000 tasks (1.15x overhead buffer)","assumptions":"Monthly subscription plan amortized over 1,000 tasks/month."},"reason":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[],"freeMatch":"none","paidPick":{"available":true,"unavailableReason":null,"providerId":"motherduck","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"duckdb","cite":"Depot Pick for spreadsheet-sql-agents: motherduck (asOf 2026-10-19). See GET /api/jtbds/spreadsheet-sql-agents + GET /api/methodology.","citePath":"/api/jtbds/spreadsheet-sql-agents"},"recommendation":{"mode":"free_only","use":[],"gap":"no_free_resource_for_job","creditsNotFree":[],"doesNotPromotePaidSku":true}},{"jtbdId":"document-parse","decide":{"available":true,"unavailableReason":null,"providerId":"llama-parse","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"unstructured","cite":"Depot Pick for document-parse: llama-parse (asOf 2026-09-14). See GET /api/jtbds/document-parse + GET /api/methodology.","citePath":"/api/jtbds/document-parse"},"quote":{"available":true,"unavailableReason":null,"cheapest":{"providerId":"reducto","slug":"reducto","name":"Reducto","skuId":"reducto-parse-1k-pages","sku":"r-1 Parse API","item":"r-1 Parse API","plan":"r-1 Parse API — Standard (pay-as-you-go) rate per 1,000 pages after $150 free usage","isFloorPrice":true,"floorWarning":"Provider-wide floor SKU; may not be the flagship model scored for this JTBD.","skuKind":"doc_pages","unit":"usd_per_1k_pages","amountUsd":10,"comparison":"min sourced document-parse price per 1k pages among candidates (per-page rows are used only when no per-1k row exists; never converted); credit-based plans were not ranked; not quality-adjusted","usdPerMillionInputTokens":null,"sourceUrl":"https://reducto.ai/pricing","asOf":"2026-10-19"},"recommendedWorkloadQuote":null,"representativeQuote":null,"estimatedTaskCost":null,"reason":null,"priceWinnerNote":"Only 1 candidate has a matching USD per 1k pages; nothing was compared, so pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[{"id":"docling","name":"Docling","kind":"free_ocr","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/docling-project/docling/main/LICENSE"},{"id":"easyocr","name":"EasyOCR","kind":"free_ocr","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/JaidedAI/EasyOCR/master/LICENSE"},{"id":"florence-2-base","name":"Florence-2-base","kind":"open_weights","cost":"oss","substitutable":true,"sourceUrl":"https://huggingface.co/microsoft/Florence-2-base/raw/main/LICENSE"}],"freeMatch":"jtbd","paidPick":{"available":true,"unavailableReason":null,"providerId":"llama-parse","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"unstructured","cite":"Depot Pick for document-parse: llama-parse (asOf 2026-09-14). See GET /api/jtbds/document-parse + GET /api/methodology.","citePath":"/api/jtbds/document-parse"},"recommendation":{"mode":"free_only","use":[{"id":"docling","name":"Docling","kind":"free_ocr","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/docling-project/docling/main/LICENSE"},{"id":"easyocr","name":"EasyOCR","kind":"free_ocr","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/JaidedAI/EasyOCR/master/LICENSE"},{"id":"florence-2-base","name":"Florence-2-base","kind":"open_weights","cost":"oss","substitutable":true,"sourceUrl":"https://huggingface.co/microsoft/Florence-2-base/raw/main/LICENSE"}],"gap":null,"creditsNotFree":[],"doesNotPromotePaidSku":true}},{"jtbdId":"knowledge-graph-extract","decide":{"available":true,"unavailableReason":null,"providerId":"diffbot","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"firecrawl","cite":"Depot Pick for knowledge-graph-extract: diffbot (asOf 2026-09-14). See GET /api/jtbds/knowledge-graph-extract + GET /api/methodology.","citePath":"/api/jtbds/knowledge-graph-extract"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":null,"representativeQuote":null,"estimatedTaskCost":null,"reason":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[],"freeMatch":"none","paidPick":{"available":true,"unavailableReason":null,"providerId":"diffbot","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"firecrawl","cite":"Depot Pick for knowledge-graph-extract: diffbot (asOf 2026-09-14). See GET /api/jtbds/knowledge-graph-extract + GET /api/methodology.","citePath":"/api/jtbds/knowledge-graph-extract"},"recommendation":{"mode":"free_only","use":[],"gap":"no_free_resource_for_job","creditsNotFree":[],"doesNotPromotePaidSku":true}},{"jtbdId":"ml-dataset-versioning","decide":{"available":true,"unavailableReason":null,"providerId":"weights-biases","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"langsmith","cite":"Depot Pick for ml-dataset-versioning: weights-biases (asOf 2026-09-14). See GET /api/jtbds/ml-dataset-versioning + GET /api/methodology.","citePath":"/api/jtbds/ml-dataset-versioning"},"quote":{"available":true,"unavailableReason":null,"cheapest":null,"recommendedWorkloadQuote":null,"representativeQuote":null,"estimatedTaskCost":null,"reason":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null."},"pickIsNotPriceWinner":false,"freeResources":[],"freeMatch":"none","paidPick":{"available":true,"unavailableReason":null,"providerId":"weights-biases","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"langsmith","cite":"Depot Pick for ml-dataset-versioning: weights-biases (asOf 2026-09-14). See GET /api/jtbds/ml-dataset-versioning + GET /api/methodology.","citePath":"/api/jtbds/ml-dataset-versioning"},"recommendation":{"mode":"free_only","use":[],"gap":"no_free_resource_for_job","creditsNotFree":[],"doesNotPromotePaidSku":true}}],"failures":[{"id":"schema-drift","name":"Schema drift","detection":"Validate every tool call and every loaded table against the current schema. Quarantine mismatches instead of coercing them."},{"id":"partial-tool-success","name":"Partial tool success","detection":"Require a per-item status and a failure count. Success for the task requires the failed count to be zero or explicitly handed to a retry queue."},{"id":"silent-truncation","name":"Silent truncation","detection":"Tools must return whether the payload was truncated and how long the original was. Fail the task if the answer depends on the missing span."},{"id":"stale-retrieval","name":"Stale retrieval","detection":"Store the source URL and the time it was fetched. If a newer canonical page exists, or two stored sources disagree, do not answer from the older one."},{"id":"hallucinated-tool-args","name":"Hallucinated tool arguments","detection":"Reject a call that fails the current schema or names an unknown id, and do that before the tool runs a side effect."},{"id":"collateral-side-effects","name":"Collateral side effects","detection":"Snapshot the workspace or app state, then diff it against an allowlist. A passing check plus an unexpected diff is a failure."}],"failuresOmittedBecauseMissing":[],"caseStudies":[{"id":"dbt-cloud-databricks-adapter-arg-2025","title":"dbt Cloud scheduled jobs failed on an unexpected Databricks adapter argument","sourceUrl":"https://status.getdbt.com/emea-cell-1-azure/incidents/01K59QNKF7W44ER40KRH1RQJFZ","year":2025,"studyKind":"production_incident"}],"caseStudiesRelated":1,"caseStudiesOmitted":0,"caseStudiesReason":null,"links":{"kit":"/api/kit?class=data-etl&cost=free","page":"/agents/kit/data-etl?cost=free","agentClass":"/api/agent-classes/data-etl","failures":"/api/failures","caseStudies":"/api/case-studies?class=data-etl"},"recommendation":{"mode":"free_only","doesNotPromotePaidSku":true,"use":[{"jtbdId":"lakehouse-llm","paidPick":{"available":true,"unavailableReason":null,"providerId":"databricks-mosaic","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"snowflake-cortex","cite":"Depot Pick for lakehouse-llm: databricks-mosaic (asOf 2026-09-14). See GET /api/jtbds/lakehouse-llm + GET /api/methodology.","citePath":"/api/jtbds/lakehouse-llm"},"use":[],"gap":"no_free_resource_for_job","creditsNotFree":[]},{"jtbdId":"sql-warehouse-agent-context","paidPick":{"available":true,"unavailableReason":null,"providerId":"motherduck","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"snowflake-cortex","cite":"Depot Pick for sql-warehouse-agent-context: motherduck (asOf 2026-10-19). See GET /api/jtbds/sql-warehouse-agent-context + GET /api/methodology.","citePath":"/api/jtbds/sql-warehouse-agent-context"},"use":[{"id":"duckdb","name":"DuckDB","kind":"dev_tool","cost":"oss","substitutable":true,"sourceUrl":"https://github.com/duckdb/duckdb/blob/main/LICENSE"}],"gap":null,"creditsNotFree":[]},{"jtbdId":"spreadsheet-sql-agents","paidPick":{"available":true,"unavailableReason":null,"providerId":"motherduck","scoreAsOf":"2026-10-19","scoreAgeDays":8,"scoreStale":false,"runnerUpId":"duckdb","cite":"Depot Pick for spreadsheet-sql-agents: motherduck (asOf 2026-10-19). See GET /api/jtbds/spreadsheet-sql-agents + GET /api/methodology.","citePath":"/api/jtbds/spreadsheet-sql-agents"},"use":[],"gap":"no_free_resource_for_job","creditsNotFree":[]},{"jtbdId":"document-parse","paidPick":{"available":true,"unavailableReason":null,"providerId":"llama-parse","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"unstructured","cite":"Depot Pick for document-parse: llama-parse (asOf 2026-09-14). See GET /api/jtbds/document-parse + GET /api/methodology.","citePath":"/api/jtbds/document-parse"},"use":[{"id":"docling","name":"Docling","kind":"free_ocr","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/docling-project/docling/main/LICENSE"},{"id":"easyocr","name":"EasyOCR","kind":"free_ocr","cost":"oss","substitutable":true,"sourceUrl":"https://raw.githubusercontent.com/JaidedAI/EasyOCR/master/LICENSE"},{"id":"florence-2-base","name":"Florence-2-base","kind":"open_weights","cost":"oss","substitutable":true,"sourceUrl":"https://huggingface.co/microsoft/Florence-2-base/raw/main/LICENSE"}],"gap":null,"creditsNotFree":[]},{"jtbdId":"knowledge-graph-extract","paidPick":{"available":true,"unavailableReason":null,"providerId":"diffbot","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"firecrawl","cite":"Depot Pick for knowledge-graph-extract: diffbot (asOf 2026-09-14). See GET /api/jtbds/knowledge-graph-extract + GET /api/methodology.","citePath":"/api/jtbds/knowledge-graph-extract"},"use":[],"gap":"no_free_resource_for_job","creditsNotFree":[]},{"jtbdId":"ml-dataset-versioning","paidPick":{"available":true,"unavailableReason":null,"providerId":"weights-biases","scoreAsOf":"2026-09-14","scoreAgeDays":43,"scoreStale":true,"runnerUpId":"langsmith","cite":"Depot Pick for ml-dataset-versioning: weights-biases (asOf 2026-09-14). See GET /api/jtbds/ml-dataset-versioning + GET /api/methodology.","citePath":"/api/jtbds/ml-dataset-versioning"},"use":[],"gap":"no_free_resource_for_job","creditsNotFree":[]}]},"stackContext":{"host":null,"framework":null,"repo":null,"lang":null,"existing":[],"volume":null,"sender":null,"detectedFromTask":[]},"contextAdvice":[],"firstActions":["https://getagentdepot.com/api/hub","https://getagentdepot.com/api/decide?jtbd=lakehouse-llm","https://getagentdepot.com/api/quote?jtbd=lakehouse-llm","https://getagentdepot.com/api/kit?class=data-etl&cost=free","https://getagentdepot.com/api/failures"],"honesty":["Picks are the current Depot Pick from GET /api/decide. This kit does not rescore.","Cheapest SKU is copied from GET /api/quote for that job. Input and output are not blended. A chat SKU is not borrowed for a non-chat job. If quote.cheapest is null, there is no matching sourced price.","pickIsNotPriceWinner is true only when that job's Depot Pick and cheapest matching SKU both exist and the quote says the pick is not the price winner. If either is missing, the field is false.","freeResources are existing /api/free items whose jtbdIds include that job, up to 3, sorted by id. If none list the job, freeResources is [] and freeMatch is none. Kind, provider, and docs are not fallbacks. Free does not change the pick.","firstActions are endpoint URLs for this class: hub, decide for the first listed need, quote for that need, this kit, and /api/failures. No other step is added.","Failures are the modes already listed on the class. Case studies are the first 3 related studies in catalog order, with the source URL already stored. Omitted studies stay on GET /api/case-studies?class=.","cost=free sets recommendation.mode to free_only. recommendation.use on each need is existing free rows whose jtbd ids include that job, excluding credits_not_free_forever. Those credit rows are listed under creditsNotFree with their stored notes. If none remain, use is [] and gap is no_free_resource_for_job. paidPick is the same decide result and is not free. A cheapest paid SKU is not copied into use."]}