A keyword combiner multiplies every term in list A by every term in list B to produce a complete set of pairs, and when you combine two keyword lists with the Keyword Combiner the result is every possible phrase in a predictable order with no silent truncation. The tool accepts one phrase per line in each editor, lets you decide which list comes first and what literal separator sits between the two halves, and returns up to 10,000 unique combinations as plain text you can copy in a single block. Every operation runs in your current browser tab, so neither list leaves the page until you press the copy button. That makes the output predictable for testing, easy to diff between runs, and safe to draft on a shared workstation without exposing the contents to a remote service. The behavior is deliberately mechanical: the combiner does not estimate search volume, judge intent, infer language, or query a keyword provider, so the result still has to be treated as a candidate list rather than a finished research deliverable.

What the tool actually does to your two lists
Behind the friendly interface, the combiner computes a Cartesian product. If list A has three items and list B has two items, the output always contains exactly 3 × 2 = 6 phrases, every one of them unique by construction. With list A holding red, blue, and green, and list B holding shoes and hats, the result with a space separator and A-then-B order is:
- red shoes
- red hats
- blue shoes
- blue hats
- green shoes
- green hats
That is six pairs because three colors combined with two product names produce six input pairs, which is the same arithmetic the tool checks before it generates anything. The pairing is mechanical rather than semantic. The combiner has no opinion on whether green shoes is more interesting than red hats, no sense that green hats might overlap with another phrase in meaning, and no access to a search engine or advertising account. Treat the output the same way you would treat a manual cross-join in a spreadsheet: useful as raw material, never the finished product.
Getting your two lists ready before you paste
The quality of your output is bounded by the quality of your two source lists, so spend a minute preparing them.
- One phrase per line. Each non-empty line becomes one term after outer whitespace is trimmed. Multiple phrases on a single line are concatenated into one term, which almost never produces what you wanted.
- Trim duplicates yourself where convenient. The combiner does its own exact-match deduplication inside each list, but starting from a clean list keeps the summary panel easier to read.
- Respect the size limits. Each editor accepts up to 100,000 UTF-16 code units of pasted text, each list is capped at 500 unique terms, and each individual term can hold up to 100 Unicode code points. Going over any of these bounds is rejected before the request runs.
- Keep capitalization intentional. Deduplication is case-sensitive, so Shoe and shoe stay distinct. Use that to keep intentional variants, or normalize ahead of time if you do not want both.
- Skip the formatting. Do not wrap phrases in quotation marks, brackets, or match-type symbols such as [shoes]. The combiner copies text literally and does not add Google Ads syntax.
If you want a second opinion on the separator before you commit, the separator choice guide walks through the trade-offs between spaces, hyphens, plus signs, and empty separators with concrete examples.
Combining two keyword lists in the Keyword Combiner
The full task takes only a few clicks once your lists are ready.
- Paste list A. Put one base term or phrase per line in the first editor. Empty lines are skipped, leading and trailing whitespace on each line is trimmed, and exact duplicates are removed while the first occurrence is kept.
- Paste list B. Put one modifier or second term per line in the second editor using the same rules. The two editors are independent, so the same phrase can appear in both lists if that is genuinely what you need.
- Pick the order. Choose A-then-B if you want every list-A phrase to lead, or B-then-A to flip the loop. Changing the order also flips the iteration order, so the output diff is predictable.
- Enter the separator. Type the literal characters that should sit between the two halves. A single space, a hyphen, a plus sign, and an empty string are all valid. The separator is bounded at 20 Unicode code points and may not contain a line break or control character.
- Combine the complete pair set. Click the combine action. The tool computes the theoretical pair count first and rejects the whole request if it exceeds 10,000 input pairs, so no partial sample ever reaches the output.
- Read the summary. The summary panel reports the normalized size of each list, the theoretical pair count, how many input duplicates were removed, how many output collisions were removed, and the final unique output count.
- Remove irrelevant candidates. Some pairs will sound unnatural, repeat a meaning, or obviously mismatch a landing page. Edit the result list directly before copying so you do not carry junk into the next step.
- Copy the result. The copy button captures the final list as one phrase per line in the same order it appears on screen, ready to paste into a spreadsheet, ad-group draft, content brief, or another tool.
Reading the summary so nothing surprises you
The summary is the part most people skim, and it is the part that tells you whether the request did what you expected. Each field has a fixed meaning:
| Field | What it tells you |
|---|---|
| Normalized size of list A | Non-empty, trimmed, deduplicated lines from the first editor. |
| Normalized size of list B | Non-empty, trimmed, deduplicated lines from the second editor. |
| Theoretical pair count | Normalized size of A multiplied by normalized size of B, calculated before generation. |
| Removed input duplicates | Exact, case-sensitive repeats that were trimmed out of either source list. |
| Removed output collisions | Distinct input pairs that produced the same final phrase, for example when the separator is empty. |
| Unique output count | Final number of phrases sitting in the copy buffer. |
If the unique output count looks much smaller than you expected, the most common cause is output collisions from an empty or short separator: the pair ab + c and the pair a + bc both collapse to abc and only the first is kept. If the unique output count looks much larger than you expected, you probably underestimated how many source terms you actually had after trimming and dedup.
Cleaning the output before you put it to work
The combiner hands you raw candidates, not a finished target list. A short review pass saves you trouble later.
- Drop phrases with no realistic search intent. A pair that only makes sense as product copy should not be exported as a search target.
- Confirm landing-page fit. Each surviving phrase should map to a page you can actually send traffic to, or to a clear intent you intend to serve.
- Check trademark and policy. Some pairs will reference brands or restricted terms that the destination system will reject before they can run.
- Validate demand elsewhere. The combiner does not provide search volume, competition, or cost-per-click data, so cross-check the surviving list against a keyword source, log file, or first-party analytics before committing budget.
- Re-run with intent. Because the output is deterministic, the same two source lists always produce the same text. You can rerun after editing either list and diff the result to see exactly which phrases changed.
Limits and pitfalls worth knowing before you start
A few constraints are worth internalizing before you commit to a workflow.
- Hard cap at 10,000 input pairs. Anything larger fails the whole request before generation. The tool does not sample, paginate, or keep the first 10,000 pairs, so if your normalized sizes put you over the cap you have to shrink either list before you try again.
- Output collisions are not the same as input duplicates. Input duplicates are removed inside each source list before generation. Output collisions are removed after generation. Both counts are reported separately, so use them to tell which cleanup step actually fired.
- The separator is literal, not smart. No hidden spacing is added. With a single space as the separator, red and shoes become red shoes; with an empty separator, they become redshoes. Pick deliberately and check the first few lines of the output before you copy the whole block.
- Order is stable but not alphabetical. The first-seen order of each list is preserved, and the chosen outer list drives iteration. If you need a sorted output, sort it yourself after copying.
- Nothing leaves the tab until you copy. The combiner runs locally and only copies when you press the button, which makes it safe to use on a workstation without sending your source lists to a third party.
Related reading: Free Keyword Density Checker With No Sign Up.