e2e-fabric-cost-estimation
Estimates Fabric capacity cost before a migration by profiling Spark, SQL, Power BI, and Real-Time workloads, then recommending SKU size and comparing Reserved, Pay-As-You-Go, and Autoscale billing. Use only for capacity sizing and pricing questions, not for general migration or connectivity work.
Install / Use
npx skills add microsoft/skills-for-fabric --skill e2e-fabric-cost-estimationInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Data & AnalyticsSupported Platforms
Our assessment of e2e-fabric-cost-estimation
e2e-fabric-cost-estimation scores 84/100 on our quality scale, 352nd of 506 Data & Analytics skills we index.
Its SKILL.md is 41 KB long, well organised into 46 sections with 13 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
With 1,181 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 15 days ago, so e2e-fabric-cost-estimation is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
e2e-fabric-cost-estimation compared with similar skills
All 4 of these similar skills score higher than e2e-fabric-cost-estimation; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| e2e-fabric-cost-estimation (this skill)by microsoft | 84 | 1.2k | 15d ago | SKILL.md |
| claude-memby thedotmack | 100 | 95.2k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 89.0k | 17d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.3k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 85.3k | 2d ago | MCP Server |
Frequently asked questions
- How do I install e2e-fabric-cost-estimation?
- Run
npx skills add microsoft/skills-for-fabric --skill e2e-fabric-cost-estimation. The install tabs above show the steps for each supported agent. - Which AI agents does e2e-fabric-cost-estimation work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is e2e-fabric-cost-estimation safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is e2e-fabric-cost-estimation still maintained?
- The repository was last updated 15 days ago, so e2e-fabric-cost-estimation is actively maintained.
Skill content
View source on GitHubname: e2e-fabric-cost-estimation description: "Estimates Fabric capacity cost before a migration by profiling Spark, SQL, Power BI, and Real-Time workloads, then recommending SKU size and comparing Reserved, Pay-As-You-Go, and Autoscale billing. Use only for capacity sizing and pricing questions, not for general migration or connectivity work."
Telemetry — MANDATORY. Every
api.fabric.microsoft.comcall must carryx-ms-fabric-skill: e2e-fabric-cost-estimation(az rest:--headers "x-ms-fabric-skill=e2e-fabric-cost-estimation"), including every LRO poll,fabric_lroand retry. Snippets omit it — add it anyway.
CRITICAL NOTES
- To find the workspace details (including its ID) from workspace name: list all workspaces and, then, use JMESPath filtering
- To find the item details (including its ID) from workspace ID, item type, and item name: list all items of that type in that workspace and, then, use JMESPath filtering
- Pricing is region-specific. Always resolve the capacity's Azure region (via the Fabric REST
GET /v1/capacities, which returnsregion/sku/state, or via ARM) or ask the user before any price lookup, and state the region with every quoted figure.
🔴 MANDATORY LIVE-PRICING FETCH — whenever your answer contains a dollar figure. Before presenting any dollar amount, cost, break-even point, billing-mode comparison, RI-vs-PAYG analysis, migration cost, or cost worksheet, you must run a shell command (
bash/powershell) that calls the Azure Retail Prices API athttps://prices.azure.com/api/retail/prices. This applies without exception to every priced answer — Databricks/Synapse migration cost, Autoscale vs. base-SKU break-even, RI-vs-PAYG break-even, cost worksheets, and billing-mode strategy. Fetch the live per-CU-hour PAYG rate (priceType eq 'Consumption',* Capacity Usage CUmeters), the reservation term totals, and theautoscale for Spark Capacity Usage CUrate first, then compute. Never answer a priced question from memorized or hardcoded rates, and never reason about break-even purely from formulas. If the meter lookup returns no rows, surface that to the user — never silently fall back to a hardcoded rate (e.g., do not assume$0.18/CU-hrfor Autoscale; the Autoscale meter is a distinct rate that must be fetched). Exception — pure capacity sizing: a question answered purely in capacity units with no dollar figure (e.g., "which SKU fits 80 CUs?" or "how many CUs does a P2 map to?") is CU math, not pricing, and does not require a fetch. The moment you attach a dollar amount to that sizing answer, the fetch becomes mandatory.
🟠 CLARIFY FIRST, THEN ACT — do not assume defaults. A priced request needs two inputs before you can fetch or compute: the Azure region and the workload profile (e.g. CU-hours/day, node/job details, or the source cluster sizes for a migration). If either is missing, your first response must ask the user for the missing input(s) and STOP — do not pick a default region (never assume
East USor any other region to "get started"), do not call the pricing API, and do not produce estimates from assumed values. Only after the user supplies the missing inputs do you fetch live prices and compute. Asking is the correct behavior even though the mandatory-fetch rule applies to the eventual priced answer.
🔴 AUTOSCALE RATE IS A DISTINCT METER — never reuse the base/PAYG rate for it. The
autoscale for Spark Capacity Usage CUmeter is a separate price from the base* Capacity Usage CUPAYG rate. You must fetch it with its own API call and read the returnedretailPrice. It is a correctness bug to assign the base/PAYG rate (or a memorized figure such as0.18) to an autoscale variable — e.g.autoscaleRate = paygRateorautoscaleRate = 0.18is forbidden. If the autoscale meter lookup returns no rows, list all Fabric Spark meters for the region and surface that to the user; never substitute the base rate.
Fabric Cost Estimation
Prerequisite Knowledge
- COMMON-CORE.md — Fabric topology, capacity concepts, authentication & token audiences
- COMMON-CLI.md — CLI patterns for capacity discovery, authentication recipes (
az login, token acquisition)
Table of Contents
| Topic | Section | |---|---| | Fabric Billing Model Overview | § Billing Model | | Capacity Unit (CU) Reference | § CU Reference | | Workload Cost Estimation | § Workload Estimation | | Storage Pricing | § Storage | | Network Pricing | § Network | | Billing Mode Strategy | § Billing Strategy | | SKU Sizing Decision Tree | § SKU Sizing | | Migration Cost Worksheet | § Worksheet | | Pricing API Reference | pricing-api-reference.md | | Must / Prefer / Avoid | § Must / Prefer / Avoid |
Fabric Billing Model
Microsoft Fabric uses a unified capacity model where all workloads share a pool of Capacity Units (CUs). Understanding the billing dimensions:
| Dimension | Description | Billing Mechanism | |---|---|---| | Compute (CU-seconds) | Processing power consumed by queries, Spark jobs, pipelines | CU consumption against capacity SKU | | Storage (GB/month) | OneLake storage for Delta tables, Files, shortcuts | Per-GB monthly rate | | Network egress (GB) | Data leaving Azure region | Per-GB egress charges | | Capacity reservation | Base SKU commitment (F2–F8192) | Monthly or annual commitment |
Billing Modes
| Mode | Description | Best For | |---|---|---| | Reserved Instance (RI) | 1-year or 3-year commitment; significant discount (compute from live API) | Steady-state base load | | Pay-As-You-Go (PAYG) | Hourly billing; no commitment; full list price | Testing, unpredictable workloads | | Autoscale Billing for Spark | Opt-in serverless model; Spark jobs offloaded from capacity and billed per Spark CU-hour. Bursting & smoothing disabled for Spark; does not consume capacity CUs | Isolating variable Spark spend from steady-state capacity | | Fabric Trial | Trial capacity (size varies by tenant/eligibility — commonly up to F64 for 60 days); verify current trial terms before use; never size production from it | Evaluation only |
Capacity SKU Tiers — Live Pricing Lookup
Do NOT use hardcoded prices. Always fetch current pricing from the Azure Retail Prices API at runtime.
Step 1: Detect Customer Region
If the customer already has a Fabric capacity, get its region, SKU, and state from the core Fabric REST API — GET https://api.fabric.microsoft.com/v1/capacities returns region, sku, and state per capacity. Azure Resource Manager (az resource list) is an equivalent fallback; only the Fabric Admin API (/v1/admin/capacities) omits region. See the templates in resources/pricing-api-reference.md.
If no capacity exists yet, ask the user which Azure region they plan to deploy in.
Step 2: Fetch Live Fabric Pricing
Query the Azure Retail Prices API (public, no auth required). For every priced question — including Autoscale-vs-base break-even and billing-mode (PAYG/RI/pause-resume) strategy — your first action must be to actually run this fetch in a shell (bash/powershell) before any calculation. Do not reason about break-even or billing trade-offs from formulas alone; run the command, then compute from the returned retailPrice rows:
curl -s "https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&\$filter=serviceName%20eq%20'Microsoft%20Fabric'%20and%20armRegionName%20eq%20'<region>'" | jq '.Items[] | {meterName, retailPrice, unitOfMeasure, type, reservationTerm}'
Use the reference template in resources/pricing-api-reference.md to paginate NextPageLink results, then filter to the Fabric capacity meters for the selected region. The Retail Prices API does not return one row per F-SKU — matching ^F\d+ against skuName/armSkuName returns nothing. PAYG per-CU-hour is now billed on per-workload Consumption meters whose meterName ends in Capacity Usage CU (priceType eq 'Consumption', unitOfMeasure eq '1 Hour'); take the modal retailPrice across them for the base compute rate (a low, per-CU-hour figure — always use the value the API returns; do not copy any illustrative number from this skill). Reservations come from meterName eq 'Fabric Capacity CU' (the legacy flat meter is now reservation-only). Read the per-CU rates from those rows.
Step 3: Build the Pricing Table
The API gives you a per-CU rate, not per-SKU prices. Build the per-SKU table by multiplying that per-CU rate by each SKU's CU count from the documented SKU→CU map (Fn = n CUs, e.g. F64 = 64, F128 = 128, F256 = 256, F512 = 512, F1024 = 1024, F2048 = 2048, F4096 = 4096, F8192 = 8192).
Convert each reservationTerm bucket to a monthly figure correctly (the reservation rows are term totals, not hourly rates):
- PAYG monthly =
consumptionCuHourRate × skuCUs × 730(Consumption row,priceType eq 'Consumption',meterNamelike* Capacity Usage CU) - 1-Year RI monthly =
reservationRetailPrice × skuCUs ÷ 12(do not multiply by 730) - 3-Year RI monthly =
reservationRetailPrice × skuCUs ÷ 36
See the monthly conversion guidance in resources/pricing-api-reference.md.
Step 4: Present to User
Present the pricing table with the region explicitly stated:
Fabric Capacity Pricing — Region: [detected_region] (live as of [today's date])
| SKU | CUs | Monthly PAYG | 1-Year RI | 3-Year RI | RI Savings |
|-----|-----|-------------|-----------|-----------|------------|
| F4 | 4 | $[live] | $[live] | $[live] | [calc]% |
| ... | ... | ... | ... | ... | ... |
Source: Azure Retail Prices API (prices.azure.com)
IMPORTANT: If the API is unreachable, inform the user and direct them to the Azure Pricing Calculator. Never fall back to hardcoded prices — they go stale.
Capacity Unit Reference
CU Consumption by Workload
| Workload | CU Consumption Model | Key Metric | |---|---|---| | Spark (notebooks, SJD) | CU-seconds during active Spark session | vCores × duration | | SQL DW (warehouse queries) | CU-seconds per query | Query complexity × data scanned | | Power BI (semantic models, reports) | CU-seconds per query/refresh | Dataset size, refresh frequency, DAX complexity | | Data Pipelines | CU-seconds per activity execution | Activity type, data volume moved | | Eventhouse / KQL | CU-seconds per query + ingestion | Ingestion rate, query frequency | | Dataflows Gen2 | CU-seconds per refresh | Transform complexity, data volume | | OneLake | Storage only (no CU for at-rest) | GB stored |
Spark CU Mapping (Critical for Migration)
Documented conversion: 1 Fabric CU = 2 Spark vCores (Fabric Spark concurrency limits). So a node's CU equivalent is
vCores ÷ 2. The vCore counts below are pool node defaults; always validate effective consumption via a pilot before committing to SKU sizing.
| Spark Pool Node Size | vCores | Memory | CU Equivalent per Node (vCores ÷ 2) | |---|---|---|---| | Small | 4 vCores | 32 GB | 2 CUs | | Medium | 8 vCores | 64 GB | 4 CUs | | Large | 16 vCore
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
95.2kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
89.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
74.3kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Scrapling
85.3k🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
