Set up the card list once
Want it done for you? Download our free Christmas card list template, which has these columns ready, plus sent and received tracking. Or build your own as below.
One row per household, one column per part of the address. Separate columns are what make labels easy later; a single “Address” cell is hard to lay out on a label.
| Household | Street | Apt | City | State | ZIP | Send card |
|---|---|---|---|---|---|---|
| The Okafor Family | 77 Birch St | Dayton | OH | 45402 | ☑ | |
| Rosa Delgado & Sam Lee | 418 Alder Ln | Apt 2 | Eugene | OR | 97401 | ☑ |
| Grandma June | 12 Elm Ct | Boston | MA | 02109 | ☐ |
- Write the name the way it should appear on the envelope: “The Okafor Family”, “Rosa Delgado & Sam Lee”. Keep first names for your own notes in another column.
- Keep ZIP codes as text, or 02109 turns into 2109. Select the column and choose Format → Number → Plain text before typing. To repair zeros already lost:
=TEXT(F2, "00000")in a spare column, then paste it back as values. - Add a “Send card” checkbox column (Insert → Checkbox). It’s how you choose who gets a card each year without deleting anyone.
- Starting from Google Contacts? On contacts.google.com, select the people, choose Export → Google CSV, then in Sheets use File → Import. The address arrives in columns such as
Address 1 - Street,Address 1 - CityandAddress 1 - Postal Code. Contacts with no address come through with those cells empty, so sort by street to find them.
Household names from separate columns
If your list keeps people’s names in separate columns, say First in A, Last in B and Partner in C, build the Household line instead of typing it:
=TRIM(A2&IF(C2="", "", " & "&C2)&" "&B2)
Rosa, Delgado and Tom give Rosa & Tom Delgado; Ann and Byrne with no partner give Ann Byrne. We checked both cases. For couples with different last names, add a Partner last name column (D) and use =IF(C2="", A2&" "&B2, A2&" "&B2&" & "&C2&" "&D2), which gives “Rosa Delgado & Tom Byrne”. For families, a plain text column you type yourself (“The Okafor Family”) still beats any formula.
One label per household
The classic holiday mistake is two cards to one house, because the address is on the list twice under different names. Before printing, flag shared addresses with a formula in a spare column:
=IF(COUNTIFS(B:B, B2, F:F, F2) > 1, "SAME ADDRESS", "")
Fill it down, then filter for SAME ADDRESS and merge those rows into one household name. It compares street and ZIP code, so “77 Birch St” and “77 Birch Street” won’t match: sorting by ZIP code puts near-duplicates next to each other for a quick look.
Tick who gets a card this year
Untick the people you are skipping, tick the new ones. Then count what you need to buy:
=COUNTIF(G2:G300, TRUE)
That’s the number of cards, envelopes, stamps and labels. A 30-label sheet holds 30 households, so 75 cards is three sheets of labels with 15 spare.
1. Free: a Google Docs label table
Nothing to install. You build each label’s text in the sheet, keep only the ticked rows, arrange them three across, and paste them into a Google Docs™ table sized like the label sheet.
- Make the label text. In column H:
=TEXTJOIN(CHAR(10), TRUE, A2, B2&IF(C2="", "", ", "&C2), D2&", "&E2&" "&F2)and fill down.CHAR(10)starts a new line, and the Apt only appears when there is one. - Keep the ticked rows, three across. In an empty area:
=WRAPROWS(FILTER(H2:H300, G2:G300=TRUE), 3, ""). The""stops the last row filling with #N/A when the count isn’t a multiple of three. - Copy the block into a new Google Doc (choose Paste unlinked), then set the page margins, column widths and row height to the label sheet. Our Avery 5160 guide has the exact figures for the common 30-per-sheet size.
- Print one page on plain paper, hold it against a label sheet up to the light, and adjust before using real labels.
Where it falls short: a label with an extra line makes its table row taller and pushes every label below it out of line, and each page after the first needs another 30-row block. For one page of cards it’s fine; for 120 it gets tedious. The address labels guide compares this with a Word mail merge too.
2. An add-on: LabelRows
LabelRows reads the rows straight from your sheet, so there is no table to size and no copy to keep in sync.
- Install LabelRows from the Google Workspace Marketplace, open the card list and click the LabelRows icon (an orange tag) in the side panel on the right.
- Pick Address labels 1″ × 2⅝″ (30 per sheet), the Avery 5160 size.
- Write the label with your column names in double braces:
{{Household}}
{{Street}} {{Apt}}
{{City}}, {{State}} {{ZIP}} - Under Only rows ticked in, choose the Send card column.
- Print the free test page on plain paper first, then click Create labels. LabelRows makes a new Google Doc with the labels laid out; print it at 100%.
LabelRows has eight fonts, including Georgia and Times New Roman if you want something less plain than Arial. When it finishes, it tells you how many labels it made and how many rows were skipped as unticked or empty.
Cards going abroad
Addresses outside the US don’t follow “City, ST 12345”, and a formula that forces them into it produces labels the other country’s post office struggles with. Two columns fix it:
- Country (column I). Leave it empty for US addresses. For the rest, the USPS asks for the country name in capitals on the last line. Add it as one more part of the label formula:
=TEXTJOIN(CHAR(10), TRUE, A2, B2&IF(C2="", "", ", "&C2), D2&", "&E2&" "&F2, UPPER(I2)).TEXTJOINskips the empty country, so US labels don’t change. - Full address (column J). For a handful of foreign addresses, type the whole address exactly as the recipient writes it, with line breaks (Ctrl+Enter, or ⌘+Enter on a Mac, inside the cell), in column J. Then make the label formula in H use it when it’s there:
=IF(J2<>"", J2, TEXTJOIN(…)).
International cards need more postage than domestic ones, so count them separately: =COUNTIFS(G2:G300, TRUE, I2:I300, "<>") counts ticked rows with a country filled in.
Return address labels
Return labels are the same address on every label, which spreadsheets don’t do on their own. Two free ways:
- On the same 30-per-sheet labels. Make a tab called Return with the headers Name, Street, City line, type your address once in row 2, then copy row 2 into rows 3 to 31. Print those 30 rows with LabelRows or the Docs method. They are large for a return label, but they work and use the labels you already have.
- On small return-address labels (Avery 5167, 80 per sheet, ½″ × 1¾″). In Google Docs, set the page margins to 0.5″ top and 0.28″ left, and build a 7-column table: four 1.75″ label columns with three 0.31″ gap columns between them, rows 0.5″ high and a 7 pt font. Type your address in the first cell and copy it into the others. It’s fiddly the first time, so save the Doc and reuse it every year.
To be clear about LabelRows: the small return-address sizes (5167 and 5195) and printing several copies of one row are planned for a Pro plan that isn’t on sale yet. Today the free sizes and the copied-rows trick above are what it does.
Next year in five minutes
- Keep a history column, such as “Sent 2026”, and copy this year’s ticks into it before you change anything (paste as values).
- Write the changes in as they arrive. New addresses from returned cards or the cards you receive go straight into the sheet.
- Add a Notes column for things like “new baby, 2026” or “moved in July”. Labels only print the columns you name, so notes never end up on an envelope.
Troubleshooting
“No matches are found in FILTER evaluation.” No row is ticked, or the Send card column holds the text TRUE rather than real tick boxes. Select the column and choose Insert → Checkbox, then tick again.
“FILTER has mismatched range sizes.” The two ranges in the formula cover different rows, such as H2:H300 and G1:G300. Make them start and end on the same rows.
The card count is 0 although boxes are ticked. Same cause as the first problem: COUNTIF(…, TRUE) counts real tick boxes, not the word TRUE typed in.
A label shows a lone comma. The row has no city or state. Fill it in, or wrap the city line as TEXTJOIN(" ", TRUE, TEXTJOIN(", ", TRUE, D2, E2), F2) so the comma only appears between parts that exist.
More than 60 labels in LabelRows Free. Make one Doc for rows 2 to 120 and another for 121 to 240; the Send card tick still applies inside each range.
The labels print in random order. They follow the sheet. Sort the list by last name or ZIP code before printing (Data → Sort range, with the header row ticked) so cards are easy to match with envelopes.
Frequently asked questions
How do I make Christmas card labels from Google Sheets for free?
Join each address into one cell with TEXTJOIN and CHAR(10), keep the ticked rows with FILTER, arrange them three across with WRAPROWS, and paste the block into a Google Docs table sized like your labels. Or use the free LabelRows add-on, which reads the rows and lays out the label Doc for you.
Can I print labels only for some people on my list?
Yes. Add a checkbox column and tick the people getting a card. With the Docs method, FILTER on that column; in LabelRows, choose the column under Only rows ticked in.
How many labels can LabelRows print for free?
Up to 60 labels per Doc on the free sizes. For a longer list, make a second Doc with a row range. A Pro plan with larger runs is planned but isn't on sale yet.
How do I print return address labels from Google Sheets?
Put your address in one row, copy it into as many rows as there are labels on the sheet, and print those rows as labels. For the small 80-per-sheet return size, a Google Docs table with your address copied into every cell works without any add-on.
Why did my ZIP codes lose the leading zero?
Sheets treats 02109 as the number 2109. Format the column as Plain text before typing, or rebuild the codes with =TEXT(F2, "00000").
How do I address a card to a couple with different last names?
Write both full names, joined with an ampersand or the word and: Rosa Delgado and Tom Byrne. The guide has a formula that builds this from separate name columns.
How should I address Christmas cards going abroad?
Write the address the way the recipient's country does, and put the country name in capitals on the last line. Keep a Country column, leave it empty for US addresses, and add it to the label formula.
Related
- Free Christmas card list template for Google Sheets
- How to print wedding invitation address labels from Google Sheets
- How to print address labels from Google Sheets
- Print Avery 5160 labels from Google Sheets
- LabelRows documentation
- All guides
Disclosure: we make LabelRows, the Google Sheets add-on mentioned in this guide. We describe the other methods as fairly as we can, including when they are the better choice.
Google Sheets, Google Docs and Google Contacts are trademarks of Google LLC. Avery is a registered trademark of Avery Products Corporation. LabelRows and Cellbrook are not affiliated with or endorsed by Google or Avery.