# WordPress-to-Astro scope and cost worksheets

Created by WP Forged, September 26, 2026.
Guide: https://wpforged.com/guides/wordpress-to-astro-cost/

These are blank planning resources, not a quotation, market-price survey, or client budget. No monetary amounts have been supplied. Use them with any provider.

Files:

- wordpress-to-astro-scope.csv
- wordpress-to-astro-costs.csv

## 1. Set the comparison basis

Record this information in your own working document or a separate sheet:

- Project or option name:
- Prepared by:
- Budget window start:
- Budget window end (12 months after the start):
- Currency:
- Tax treatment (included or excluded, using the same basis throughout):
- Quote revision/date:
- Important requirements still unknown:

Use the same window and requirements for every proposal. Starting at project commencement includes transition costs. If comparing ongoing operation separately, give that comparison its own dates and label.

This worksheet measures expected cash payments within the chosen window. It does not calculate accounting depreciation or promise a complete financial forecast. Record subscriptions paid before the window and renewal obligations after it in the notes.

## 2. Fill in the scope yourself

Open the scope CSV in a spreadsheet application. It has 11 columns and 12 suggested starting rows. Add or remove rows to fit your site. Your inputs belong in the empty cells; the row labels are prompts, not a promised package.

- `requirement_id`: Stable reference to use in the brief and quote.
- `area`: The type of work.
- `existing_example_url`: A real example from your current site. Do not include private credentials in a URL.
- `required_outcome`: What a visitor or editor needs to do.
- `quantity_or_scope_entered_by_you`: Your known page types, instances, integration scope, or limit. Leave unknowns blank and describe the question.
- `current_provider_or_dependency`: The tool or service involved, if you know it.
- `content_or_access_needed`: Who supplies content or arranges access. Never put passwords here.
- `acceptance_evidence_to_request`: What result would show that the requirement works.
- `decision_owner`: The person who can approve the requirement and result.
- `open_question`: Anything the provider must investigate before fixing scope.
- `status`: For example Not scoped, Needs review, Agreed, or Out of scope.

### Illustrative completed scope entry

This is an example written for the worksheet, not a real project or a test result. Replace it with your own requirement; it is not included in the blank CSV.

- Requirement: Workshop publication.
- Required outcome: An editor adds a workshop with title, date, image, description, and booking link.
- Scope: An agreed workshop page and upcoming-workshop listing; rules for cancelled and past events to be decided.
- Current dependency: Existing booking provider, to be confirmed by the site owner.
- Evidence requested: Private review of an unpublished workshop, then the correct public page, listing, and booking destination after publication.
- Open question: Where is the workshop date stored and what updates the listing today?
- Status: Illustrative requirement only; no implementation or test performed.

## 3. Fill in the costs from evidence

The cost CSV has 11 columns and 16 suggested starting rows. It contains no formulas or preset prices.

- `row_id` (A): Stable cost reference.
- `category` (B): One-time, Transition, Recurring, or Other.
- `item` (C): The charge being priced. Rename/add rows to match the quote.
- `currency` (D): Use one comparison currency; document any conversion source/date separately.
- `amount_per_charge` (E): Numeric amount for one actual charge. Leave blank when unknown. Do not type a currency symbol in this numeric cell.
- `charges_in_window` (F): Number of such payments expected inside the chosen 12-month window. Leave blank when the payment schedule is unknown.
- `total_in_window` (G): E multiplied by F, only after both are known and the row is not included elsewhere.
- `included_in_row` (H): Reference to another row that already contains this charge. Keep E, F, and G blank for this bundled row to avoid double counting.
- `evidence_or_quote` (I): Quote reference, invoice, or official plan link and relevant terms.
- `checked_date` (J): Date on which those terms were checked.
- `assumptions_and_renewal_notes` (K): Scope, tax treatment, coverage, billing start, renewal date, usage assumptions, or reason a row is not applicable.

Unknown is not zero. Enter zero only when you have confirmed no payment is due in the window, and explain why. Remove an inapplicable row or label it clearly; do not leave its relevance ambiguous.

For a single project invoice due inside the window, enter the invoice amount and one charge. For staged invoices, record each payment separately if its timing or amount differs. For a monthly service, count the payments that fall in the chosen window. For annual subscriptions, count actual renewals/payments in that window, not months. If a usage charge is uncertain, record its estimate, evidence, and assumptions explicitly; do not present it as a fixed quote.

### Optional spreadsheet calculation

If your sheet preserves the CSV column order, this formula in G2 leaves bundled and unknown rows blank:

```text
=IF(H2<>"","",IF(OR(E2="",F2=""),"",E2*F2))
```

Copy it into the other cost rows as appropriate. Some spreadsheet locales use semicolons instead of commas in formulas. The plain rule is: included elsewhere means no additional total; otherwise multiply only when both inputs are present.

Sum column G below the cost rows and label the result **Known cash subtotal**, not Total project budget. Do not include the subtotal's own cell in the sum. A SUM ignores blanks, so it cannot tell you that a required row is missing a price. List the unresolved required rows next to the subtotal and resolve them before calling the budget complete.

## 4. Check the arithmetic and the boundaries

Before using the result to make a decision:

1. Check a one-time row against the actual invoice or quotation.
2. Check a recurring row against the dates on which payments are expected.
3. Confirm an annual price has not been multiplied by months.
4. Confirm a bundled item has not also been added separately.
5. Leave a required amount blank and confirm the formula returns blank; keep it on the unresolved list.
6. Confirm an actual zero amount returns zero when the payment count is known.
7. Keep currency and tax treatment consistent.
8. Record future renewals and costs paid before the window even when they do not change this window's subtotal.

These are checks for your populated copy. The blank files do not establish your site's costs or the feasibility of its integrations.

## 5. Record internal effort separately

Create a separate list for content gathering, reviews, training, and approvals. Record task, owner, estimated hours, and assumption. If your organisation uses an internal hourly rate, apply its own rate and show that estimate separately from cash payments. Do not add internal effort into supplier invoices or invent a rate to fill an empty cell.

## 6. Compare like with like

Make a separate copy for each credible option: repair the current site, keep WordPress with a separate frontend, or replace the editing system. Compare the same requirements and dates. Record exclusions beside the price. A smaller quote with more work left to your team is a different scope, not automatically a better deal.

Questions for WP Forged: https://wpforged.com/contact/
Keep confidential quotes and account details in your own files; the worksheet does not upload them anywhere.
