Google Doc Format Skill
Create professionally formatted Google Docs from markdown using gog docs create --file. The key insight: markdown tables and formatting render properly as native Google Docs elements when passed through the --file flag.
Core Method
Always use gog docs create with --file to import markdown. Never use gog docs write or gog docs insert for full documents — those don't parse markdown tables.
gog docs create "Doc Title" --file source.md --parent "FOLDER_ID" --pageless --force --no-input
Flags:
--file — Import markdown file (required for proper table rendering)
--parent — Google Drive folder ID
--pageless — Use pageless layout (recommended for reports/audits)
--force — Skip confirmations
Markdown → Google Docs Mapping
| Markdown | Google Docs Element |
|---|
# Heading 1 | HEADING_1 |
## Heading 2 | HEADING_2 |
### Heading 3 | HEADING_3 |
**bold text** | Bold text |
*italic text* | Italic text |
- item or * item | Bullet list |
1. item | Numbered list |
| col1 | col2 | | Native TABLE element |
[link text](url) | Clickable hyperlink |
--- | Horizontal rule |
> blockquote | Indented text |
Table Formatting Rules
Markdown pipe tables render as native Google Docs tables — this is the main value of this skill. Tables are the element most likely to break when creating docs any other way.
Correct format:
| # | Document | Link |
|---|----------|------|
| 01 | Technical SEO Audit | [Open doc](https://docs.google.com/document/d/DOC_ID/edit) |
| 02 | On-Page SEO Audit | [Open doc](https://docs.google.com/document/d/DOC_ID/edit) |
What NOT to do:
- ❌ Tab-separated values (no
\t between columns)
- ❌ Plain text pretending to be a table
- ❌ Using
gog docs write with raw text (doesn't parse markdown)
- ❌ Putting tables inside code blocks (won't render as tables)
Document Templates
Master Index / Link Index Doc
# Project Name — Deliverables Master Index
*Last updated: DATE*
---
## 📋 Section Name
### Subsection
| # | Document | Link |
|---|----------|------|
| 01 | Document Name | [Open doc](https://docs.google.com/document/d/DOC_ID/edit) |
| 02 | Document Name | [Open doc](https://docs.google.com/document/d/DOC_ID/edit) |
---
## 🎨 Another Section
### Subsection
| # | Document | Link |
|---|----------|------|
| 01 | Document Name | [Open doc](https://docs.google.com/document/d/DOC_ID/edit) |
---
## 📂 Folder Structure
- **Root:** Folder Name
- **Subfolder**
- Document 1
- Document 2
Audit/Report Doc
# Report Title: Descriptive Subtitle
**URL:** /page-slug/
**Target Keywords:** keyword1, keyword2, keyword3
**Meta Title:** SEO Title (60 chars)
**Meta Description:** Meta description (155 chars)
---
## Section Heading
Body paragraph with **bold key terms** and normal text.
### Subsection
| Metric | 2024 | 2023 | Change |
|--------|------|------|--------|
| Value 1 | 232 | 274 | -15% |
**Key takeaway:** Summary sentence after the table.
### Another Subsection
- **Bold label** — Description text
- **Bold label** — Description text
Workflow
- Write markdown to temp file —
cat > /tmp/doc_name.md << 'EOF'
- Create doc —
gog docs create "Title" --file /tmp/doc_name.md --parent FOLDER_ID --pageless --force --no-input
- Verify structure —
gog docs structure DOC_ID --no-input | grep -i table
- Verify content —
gog docs cat DOC_ID --no-input | head -20
Verification Checklist
After creating, verify:
Replacing an Existing Doc
To replace a badly formatted doc:
- Create new doc with
--file flag
- Verify formatting on the new doc
- Rename new doc to match old name:
gog drive rename NEW_ID "Original Name" --force --no-input
- Delete old doc:
gog drive delete OLD_ID --force --no-input
- Move new doc to correct folder if needed:
gog drive move NEW_ID --parent FOLDER_ID --force --no-input
Common Issues
| Problem | Cause | Fix |
|---|
| Tables show as pipe-separated text | Used gog docs write instead of --file | Recreate with gog docs create --file |
| Links not clickable | Used plain URLs, not markdown link syntax | Use [text](url) format |
| No headings | Used underline-style headings | Use # prefix headings |
| Missing bold | Used HTML <b> tags | Use **text** markdown |
| Rate limit (429) | Too many API calls in short time | Add sleep 3 between operations |
Rate Limiting
Google Docs API has per-minute write quotas. When creating multiple docs:
- Add
sleep 3 between create operations
- If you get 429 errors, wait 60 seconds and retry
- For large batches (5+ docs), add
sleep 5 between each
Getting Doc IDs for Link Tables
To build a link index:
- List folder contents:
gog drive ls --parent FOLDER_ID --json --no-input
- Extract IDs and names with:
python3 -c "import json,sys; data=json.load(sys.stdin); [print(f'{f[\"name\"]} | {f[\"id\"]}') for f in data.get('files',[])]"
- Build Google Doc URLs:
https://docs.google.com/document/d/DOC_ID/edit