SEO
Strategy & Planning
Juma SEO Pulse
Juma SEO Scout
Juma SEO Pulse
Web analysis
Web Icon
Web analysis
PDF
PDF Icon
PDF
Juma SEO Pulse
Juma SEO Scout
Web analysis
Web Icon
PDF
PDF Icon

Run a content gap analysis across clients with AI: one ranked register, a scored hour allocation & an exact-query conflict register

Name the client accounts and the hours you have, and get back one ranked gap register where every row carries its competitor URL and check date, the arithmetic behind its score, and the hours it earns.

Name the client accounts and the hours on the table this month, and the research runs across the whole portfolio at once rather than one site at a time. Every gap arrives as a row: the client it belongs to, the query, the competitor URL that proves it, the date it was checked, and the five scored inputs with the sum printed beside them. The ranking is the sum, so the order can be recomputed by anyone who doubts it. Nothing is uploaded and no account access is needed.

What comes back is one register in two formats, a branded PDF for the planning conversation and an editable CSV with the same rows in the same order, plus the hour allocation those scores produce, the research one client's work can reuse for another, and an exact-query check for the terms two clients would both chase. Across 400+ marketing teams, the portfolio plan that falls apart in the account meeting is rarely the one with too few gaps. It is the one where the document and the spreadsheet disagree about what the gaps are.

1

Plan a month of content across every client at once

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Try This Flow

Example Flow result

Hide details
  • Name the hours, not just the clients. The allocation is the part that makes this a plan rather than a list. Give the monthly total and any contracted minimum per account, and the hours come back apportioned by score with the rule printed, so an account lead can see why one client got the extra time.
  • Ask for the arithmetic, not the ranking. A score with no inputs beside it cannot be argued with, which sounds like a strength until a client asks why their gap sits fourth. Request the per-criterion inputs and the sum on every row and the order becomes something the team can defend line by line.
  • Say which clients share a vertical. That is what turns the conflict check from a formality into the useful part. Two accounts in adjacent categories will eventually want the same term, and it is much cheaper to assign ownership before the briefs go out than to unpick two competing pages later.
  • Ask for the rejected gaps by name. A gap nobody assessed and a gap the team deliberately passed on look identical in a finished list. Keeping them in separate sections is what stops next month's run from rediscovering the same twelve topics and spending the hours again.
  • Give the blended rate if you want the plan costed. With a rate in the prompt every brief carries its cost and the month carries a total, which is the number the plan gets defended with at renewal. Without one you get hours, and hours alone do not travel well into a commercial conversation.
  • Mark it internal before it moves. A cross-client register names other accounts on every page, so ask for the internal marking and the client-safe cut in the same run. Then there is a stated list of what to remove rather than a judgment call made in a hurry.
2

How do you keep one register instead of a document and a spreadsheet that disagree?

Ask for the PDF and the CSV to hold the same rows in the same order, including the rows that were disqualified, and say that the CSV is the register rather than a summary of it. That one instruction removes the most common failure in portfolio planning: a readout built for the meeting and a tracker built for the team, drifting apart until nobody is sure which list the briefs came from. Parity is checkable in seconds, so it is worth stating as a requirement. The register then carries one scoring model, one row count and one running order, and the planning document stops being a second opinion on the team's own data.

Prompt
Copy

Make the CSV the register rather than a summary: the same rows as the PDF, in the same order, including the disqualified rows flagged as disqualified, under one scoring model. Confirm the row count matches in both before you deliver.

Try This Flow
3

How do you split retainer hours so the plan follows the scores?

Give the monthly hours and each client's contracted minimum, then ask for the remainder to be apportioned by each account's share of total qualified score with the rule written out. What comes back is an allocation that sums exactly to the budget, clears every minimum, and shows the fractions it came from, so a client asking why they received fewer hours gets an answer from the register rather than from a hunch. Ask for the briefed and unbriefed hours separately too. The top five assignments rarely consume the whole month, and naming the remainder is what keeps the rest of it from quietly disappearing.

Prompt
Copy

Allocate this month's hours across the accounts by each one's share of total qualified score, above the contracted minimum, and print the rule and the fractions you used. Then split the result into briefed hours and the unbriefed remainder per client, and show that the parts sum to the budget.

Try This Flow
4

Which research can serve more than one client at once?

This is the part a single-client analysis cannot give the team, because the saving only appears when the accounts are looked at together. Ask which gaps lean on the same underlying research and the answer comes back as clusters: the source pack, the clients it serves, how to reuse it, and the hours it saves. One evidence pack on meeting agendas and follow-ups can support a scheduling client's guide and another client's template, and the research happens once. Ask for the saving to be shown inside the allocation rather than added to it, so the number stays honest and the month does not quietly grow extra capacity.

Prompt
Copy

Group the register into shared research clusters: which gaps draw on the same source work, which clients each cluster serves, how to reuse it, and the hours saved. Reflect the saving inside the existing allocation rather than adding it on top, and give me the total.

Try This Flow
5

What happens when two clients want the same keyword?

Run the exact-query check and any term appearing for two accounts comes back as a row naming the clients, the recommended owner, and what the other client does instead. The resolution matters less than the fields around it: a decision-owner role, an escalation path for when both accounts insist, a check on whether either contract carries an exclusivity clause, and whether the clients have actually been told. Those last two usually come back unresolved, and that is the correct answer rather than a gap. A register that records "not yet told" is doing its job; one that quietly picks a winner is creating a problem for the account team to find later.

Prompt
Copy

Check the register for any exact query appearing under two clients and list each one with the recommended owner, what the other client does instead, a decision-owner role, the escalation path if both insist, whether either contract carries an exclusivity clause, and whether the clients have been told. Say "not recorded" where it is not established.

Try This Flow
6

How do you tell a gap you rejected from one you could not assess?

Ask for the two to be kept in separate sections and the register stops overstating what the pass established. Disqualified means the team looked and decided against it, with the reason recorded. Could not assess means the data was not there: no rank history, no conversion figures, no view of whether a contract carries a conflict clause. Both belong in the document and they are not the same finding. Keeping them apart is also what makes next month cheaper, because the rejected list stays rejected instead of being rediscovered, and the unassessed list becomes the shortlist for whatever data the team connects next.

Prompt
Copy

Split the exclusions into two sections. Disqualified: we looked and decided against it, with the reason and the provisional score kept in the register. Could not assess: the evidence was not retained, named field by field. Never file a research gap as a strategic decision.

Try This Flow

Set up your client project: account roster, retainer terms and scoring weights

Juma projects work per client rather than per task, and a portfolio run is the one case where a project above the individual accounts earns its keep. The team builds one project for the portfolio, adds the context that the open web cannot supply, and every monthly run starts from the same ground. For gap analysis the context that changes the output most is the commercial frame: who the accounts are, what each one is contracted to receive, and how this agency decides that one opportunity beats another. If the project already exists, these are additions rather than a fresh setup.

What to add

Client Account Roster

The accounts in scope, each one's vertical and primary competitors, and which accounts sit close enough to collide. With this in the project the conflict check runs against the real portfolio rather than against whichever competitors research surfaced that morning.

Retainer Terms and Hours

Monthly hours per account, contracted minimums, the blended rate and anything a statement of work promises by name. This is what turns an opportunity list into an allocation that clears every minimum and sums to the month.

Prioritization Weights

How this agency ranks: the criteria that count, the weight on each, and what disqualifies a gap outright. Keeping the weights in the project is what makes January's register comparable to June's instead of a fresh argument each month.

Conflict and Exclusivity Clauses

Any category exclusivity, non-compete or conflict language in the active contracts, and who signs off when two accounts want the same term. Without it the conflict register can only tell the team that a clash exists, not who is entitled to the ground.

Guide Juma with project info

Each file in a project can carry a short description in the project info field. Those descriptions tell Juma what a file holds and when it matters, so the right context gets picked up for the task at hand rather than everything at once.

  • Client Account Roster: "Accounts in scope, their verticals and competitors, and which ones sit close enough to collide. Use to scope the register and run the conflict check."
  • Retainer Terms and Hours: "Monthly hours, contracted minimums and the blended rate per account. Use for the allocation and for costing every brief."
  • Prioritization Weights: "Our criteria, their weights and what disqualifies a gap. Use as the scoring model so months stay comparable."
  • Conflict and Exclusivity Clauses: "Category exclusivity and conflict language in the active contracts, plus who signs off. Use for every row of the conflict register."
Juma Logo
Plan the whole portfolio in one pass

Frequently Asked Questions

How is this different from running a keyword gap analysis per client?

A per-client analysis answers what one account is missing. A portfolio run answers which account gets the hours, and that question only has an answer when the accounts are scored on one model in one register. The ranking crosses client lines, so a third-placed gap on one account can outrank another account's best.

Three things only appear at portfolio level. Research that one account's work can reuse for another, which is a saving no single-client pass can see. Exact-query collisions between accounts, which no single-client pass is even looking for. And an hour allocation, which needs every account's scores in the same column to be anything other than a guess.

The single-client analysis is still the right tool for a deep dive once an account has the hours. This one decides which account that is.

What stops the allocation from being arbitrary?

The rule is printed. Each account's contracted minimum comes off the top, the remainder is apportioned by that account's share of total qualified score, and the fractions are shown alongside the result so the hours can be recomputed from the register rather than taken on trust.

That matters most in the conversation where it gets questioned. An account lead asking why their client received fewer hours this month gets the account's score total and the arithmetic, not an assurance. If the agency's own weights are in the project, the answer traces all the way back to a rule the team agreed in advance.

Where the plan deviates from the scores on purpose, it has to say so and give the reason. A ranking that is quietly overridden is worse than no ranking at all.

Can we hand this register to a client?

Not as it stands, and the document says so. A cross-client register names other accounts on nearly every page, so it comes back marked internal with a stated list of what to remove for a client-safe version: the allocation, the portfolio score totals, the shared-research clusters, the conflict register and every other-client reference.

What remains after those cuts is genuinely useful to send: that client's own rows with their competitor URLs and check dates, their briefs, and the limits that apply to their data. The cut list is part of the deliverable rather than a judgment the account team makes under time pressure.

What does it do when the accounts barely overlap?

It reports the thin overlap instead of manufacturing a pattern. A portfolio of accounts in unrelated categories will produce few shared-research clusters and few collisions, and the honest output is a short list with the reason, not a set of strained connections between unrelated clients.

That is worth knowing in itself. An agency whose accounts never collide can brief them independently and skip the ownership conversation entirely. An agency finding the same term under three accounts has a commercial question to settle before anyone writes a word.

How long does this take compared with building it by hand?

Pulling competitor evidence for several accounts, scoring the gaps on a consistent model, reconciling the hours and checking for collisions between clients is usually two to three days of a senior strategist's month, repeated every month, and the cross-client checks are the part that gets skipped when the month is tight.

Running this returns the register, the allocation, the reuse clusters, the conflict check and the top briefs in one working session. What it does not decide is which criteria deserve the weight, whether a collision is one the agency can live with, and which account's relationship can absorb fewer hours this month. Those are judgment calls with contracts behind them. Strategy, taste and judgment stay human, and no allocation reaches a client without a named person signing it off.

The monthly re-run gets cheaper too. The rejected list stays rejected, the unassessed list becomes the shortlist for whatever data the team connects next, and the weights stay in the project so each month's register is comparable to the last.

Don't take our word for it

Ask AI about us

400+ marketing teams trust Juma. ChatGPT, Claude, and Perplexity know why. Ask them.

Ready when you are

What's on your plate today?

Start typing a task and Juma will figure out the rest.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.