# copy_sheet_format (https://sellersheetai.com/docs/mcp-api/tools/copy_sheet_format)

> Copy formatting only (no values) from source range to target range.

Access: **WRITE** · toolset google_workspace · family null

Sheets paste-special equivalent — use this to propagate a formatted block (header style, conditional fills) to a new region without clobbering its values.

## Call it

MCP tool call:

```json
{
  "name": "copy_sheet_format",
  "arguments": {
    "spreadsheet_id": "<spreadsheet_id>",
    "source_range": "<source_range>",
    "target_range": "<target_range>"
  }
}
```

Tool API (early access — contact us):

```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/copy_sheet_format \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"spreadsheet_id":"<spreadsheet_id>","source_range":"<source_range>","target_range":"<target_range>"}'
```

## Arguments

| Name | Type | Required | Description |
|---|---|---|---|
| `spreadsheet_id` | string | yes | the spreadsheet ID (from its URL or get_sheet_metadata). |
| `source_range` | string | yes | A1 source range (e.g. 'Template!A1:D1'). |
| `target_range` | string | yes | A1 target range (e.g. 'Report!A1:D1'). |

## Result

- `data.sourceSheetId / data.targetSheetId` — the tabs involved.

## Gotchas

- A target that is a multiple of the source's height or width repeats the format, so one header row's style fills 'Report!A2:D500' in one call. A smaller target still receives the whole source. Source and target must be in the same spreadsheet. Every range here must name its tab and both ends ('Tab!A1:D10'); a range without a tab ('A1:D10') or with an open end ('Tab!A:D') is refused.

## Example

- copy_sheet_format("1ABC...", "Template!A1:D1", "Q1 Report!A1:D1")