Common issues
The problems Zyan customers hit most, grouped by area, with the cause behind each one and the exact fix — start here before opening a ticket.
Most things that look broken in Zyan are a switch that is off, a permission that was never granted, or a save that never happened. This page collects the symptoms people actually report, in the words they see on screen, with the real cause behind each one.
Two habits that solve most of it
Read the status pill. Nearly every surface in Zyan says out loud why it is not working — a Share tab pill, a readiness chip, a Block reason column. It is almost always more specific than a guess.
Check the plan, then the permission, then the switch. In that order. The plan lives under SettingsPlan & Credits, permissions under Teamthe memberPermissions. A permission cannot unlock something your plan does not sell, and some features need Zyan to arm them for your workspace on top of both.
Settings and permissions
| Symptom | Cause | Fix |
|---|---|---|
| A Settings link opens the Profile page instead of the section you wanted | The URL hash is not a real section — a typo, or a retired one | Navigate from the Settings sidebar. The bad hash is stripped automatically, so re-bookmark from there |
| “Access Restricted — You do not have permission to manage this workspace settings section.” | A non-owner deep-linked to an owner-only section | Ask the owner to make the change, or to turn on Allow full access on your member page. Plan & Credits stays owner-only even then |
| A teammate's permission grid looks right but they still see nothing | The plan does not sell that feature, Allow full access is overriding the grid, or the grid was never saved | Check Settings → Plan & Credits, check the full-access switch, and press Save on the grid at least once |
| A teammate still sees Instagram, Facebook or WhatsApp conversations after you revoked access | Those three rows are opt-out and are not in the Team permission grid | Turn them off per member in Settings → Messaging → Team access |
| A suspended member still seems to have access | Their sign-in token still carries the old role until it refreshes | Suspend or delete the member, have them sign out, and confirm on their next sign-in |
| Payday dates, digests or reminders arrive at the wrong hour | The workspace payroll schedule is still on the UTC default | Settings → Profile → Payroll schedule: set the Timezone, save, and check the Next paydays preview |
Team and seats
| Symptom | Cause | Fix |
|---|---|---|
| Invite team member is disabled and the banner mentions the seat limit | Every plan seat is taken. Pending invitations count against seats | Remove a member, revoke a pending invitation in Team → Invitations, or upgrade in Settings → Plan & Credits |
“A pending invitation already exists for <email>.” | That address was invited and has not accepted | Team → Invitations: resend or revoke the existing one |
Branding, domains and credits
| Symptom | Cause | Fix |
|---|---|---|
| Save on Settings → Appearance → Brand is greyed out | No text row has changed. Logo, favicon and brand colour save on their own actions | Edit one of the six text rows, or use Upload / Apply for images and colour |
| “Could not load the current branding — nothing was saved.” | The branding record could not be re-read, so the save was refused rather than risk overwriting other values | Reload the page and save again |
| A logo upload is rejected | Wrong format — iPhone HEIC is not accepted — or over 5 MB. Favicons must be under 512 KB | Convert to JPG, PNG, WebP or SVG and compress |
| A custom domain sits on Pending verification forever, or reads Claim expired | The records were not published, DNS has not propagated, or the 72-hour claim window lapsed | Publish the ownership TXT plus exactly one serving record — CNAME for a subdomain, A record for an apex — then Check verification. If it expired, Remove and start over |
| “Your DNS host already has a record on one of the names below” | A conflicting DNS record blocked automatic creation | Remove or update it at your DNS host, add the records shown by hand, and re-check |
| A metered AI surface stops working mid-month | The pooled credit balance hit zero. Included credits do not stack, and pack credits expire after 60 days | Settings → Plan & Credits: Refresh, then buy a credit pack or upgrade |
Clients and portals
| Symptom | Cause | Fix |
|---|---|---|
| “This client already has an unassigned portal.” | A client may hold only one portal with no project | Link the new portal to a project, or manage the existing unassigned one |
| “Add a client email before creating portal access.” | The portal login is the email, and the client record has none | Edit the client, add an email, reopen Create portal |
| Choose pack and Create pack are greyed out | Packs are applied as part of the invite, and no delivery method is selected | Tick Send onboarding invite now and pick a channel first |
| Section toggles reset after you hand-edited them | Clicking a different Portal kind pill rewrites every toggle from that kind's preset | Pick the kind first, then adjust the checkboxes, then save |
| You turned a section off but the client still gets emails about it | Section flags hide the surface, not the producers behind it | Also turn the matching category off under Settings → Access → client notification preferences |
| Active SEO program is greyed out | The website is not enrolled in the SEO Command Center, or the portal has no project | Enrol the website, then come back. Use Retry if the check errored |
| A service shows on one client website but not another | Entitlements live on a portal. A website without its own portal inherits the client's first portal's services | From Client visibility, create a portal for that website so it can hold its own services |
| Request Approval stays disabled | Approvals are project-scoped and the portal has no linked project | Link a project to the portal first |
| You cannot set a request to Cancelled | Cancellation is a client-side action only | Use Rejected, or archive the request from the Requests Inbox |
| An Unread client conversation marker will not clear | Read markers are per person | Open and read the thread yourself |
| The client never received their invite | Delivery failed, or it went from the platform address and was filtered | Resend Invite on the Portal setup card, and verify your sending domain under Settings → Email Identity |
| Discovery still shows not started after the client filled the form | Discovery is stamped on both the portal and the project row | Use Mark discovery complete under Settings → Portal lifecycle, which writes both |
| The storefront page is blank or not found | The storefront switch is off, Stripe is not connected, no products are on, or plans are not synced | Settings → Storefront: enable the storefront, confirm Stripe, and switch on at least one synced, priced, active plan |
| Cancelling an add-on did not stop the Stripe charge | Removing portal access and cancelling a subscription are separate acts | Cancel the recurring charge from Manage billing, then remove access |
| Deleting a portal lost history you wanted | Delete wipes messages, requests, tasks, files, discovery answers and the login | Use Deactivate instead — it revokes access and keeps the data |
Projects and work
| Symptom | Cause | Fix |
|---|---|---|
| A project is in the wrong bucket | Bucketing reads keywords in the free-text status. A blank status counts as Active | Set the Quick status to one of the preset stage values |
| A project shows 0% or “—” completion although work is done | Completion is checkpoint-driven, and the project has no checkpoints | Add checkpoints on the project's Timeline and complete them as work lands |
| A quick status change reverts with “Status update failed” | The write was refused by permissions, and the page read the row back rather than show a false success | Use an owner account, or ask for projects edit |
| Dragging a project on the Work board does nothing | Dragging needs projects edit, and team members only see assigned projects | Grant the permission, or move the project from its detail page |
| A board column will not delete | Default columns cannot be removed while cards sit in them | Move those projects out first. At least one column must always stay visible |
| The Team tab shows nothing | Team is owner-only, and members are served only their own rows | View it as the owner. Members use My Work |
Timesheets, files and notes
| Symptom | Cause | Fix |
|---|---|---|
| Timesheet totals do not match what someone worked | A per-day override is in place — the violet adjusted chip — or the person is hidden from your view | Open the member drill-in and Remove override, and check the eye icon beside the period |
| “Enter hours like 7:30, 7h 30m, or 7.5” | The hours field accepts only those three formats | Re-enter in one of them |
| A file will not upload | Files are capped at 100 MB and limited to an allow-list of types. Unrecognised types are refused | Compress or convert, or check the storage meter |
| A bulk download only saved some files | Bulk download opens one browser tab per file, and pop-up blockers refuse some | Allow pop-ups for the admin domain, or select fewer files |
| Notes in a folder are unreadable | The folder is password-protected and its notes are encrypted | Unlock the folder with its password. There is no recovery if the password is lost |
Scheduling and booking pages
| Symptom | Cause | Fix |
|---|---|---|
| A booking page link shows a neutral not available page | The page is draft or archived, there is no verified domain, or hosted pages are not switched on for the workspace | Read the Share tab status pill — it names which of the three |
| No slots show on a booking page | Client booking is off, weekly hours are closed, minimum notice or the booking window excludes the range, buffers and meetings consume the day, or the calendar connection needs attention | Check every one of those in Work → Meetings → Settings, then re-save |
| Zoom cannot be chosen as the location | Zoom bookings are not activated for the platform, or no healthy shared Zoom host is connected | Connect Zoom in Settings → Integrations. The dropdown label says which |
| Scheduling edits vanish after leaving the page | Settings sit in a draft until saved — the floating bar reads Unsaved scheduling changes | Press Save changes before navigating away |
Leads and forms
The full set lives on Lead troubleshooting. The four people hit most:
| Symptom | Cause | Fix |
|---|---|---|
| A published form's link shows a neutral page | The form is draft or archived, there is no verified domain, or hosted pages are not armed yet | Read the Share tab status pill |
| Form answers arrive but the lead's Email or Phone is blank | The field was never mapped to a lead column | Set Maps to lead field, save, publish |
| The capture endpoint returns Not found | No token, a wrong token, a rotated token, or the endpoint is disabled | Check Lead settings → Integration. The endpoint never says which on purpose |
| LeadPost's Test Webhook reports nothing stored | The site is still Pending install | Activate the site in Zyan first, then test |
SEO research and strategy
| Symptom | Cause | Fix |
|---|---|---|
| Start research is greyed out with a draft conflict | The website already has an open draft strategy | Activate, discard or finish the draft from the Living strategy hero |
| Start research is disabled: “Set the niche and primary services on the Research brief first…” | The brief has neither, so research could only seed from brand searches | Fill Niche and Primary services in Strategy → Research → Brief, or click Draft from the website |
| “The Research brief looks auto-filled — review it before spending.” | A brief field reads like prose rather than a search term | Edit the flagged fields. This is a warning, not a block |
| The run shows Needs you with a Cap reached chip | It hit its cost cap mid-pipeline and parked for a decision | Raise the cap and Resume, or Cancel and keep the evidence already captured |
| The run parked saying entries read as a sentence, or only brand searches were found | The seeds could not be grounded | Fix the brief so the terms are search terms, confirm Search Console is connected and has data, then Resume |
| Every paid button is greyed out: “Owner only: running this spends the DataForSEO budget.” | You are a member, not an owner or admin | Ask an owner. Free actions — crawl, track positions, cached reads, cancel — still work |
| Paid controls are blocked and readiness mentions a budget | The monthly SEO budget is blank, and blank means paused everywhere | Settings → Automation & budget: enter a positive monthly budget |
| Buttons read Run anyway | The monthly budget is reached | Wait, raise the budget, or — as an owner — click through and record an acknowledged overrun |
| A research tab offers to research the host instead of showing data | The website has no research target yet | Create the research target. If it mentions a non-country location code, set a Country in Settings → Content & page rules first |
| Strategy, Content, Page, Technical, Results and Settings are disabled in the rail | You are on an unlinked research target, which only supports research surfaces | Link the target to a Builder project, or switch back to the website |
| Readiness says the Search Console property does not match the host | The selected property is a different host, often www against non-www | Pick the matching property. This is a warning, not a block |
| “Google is connected, but Search Console write access needs attention.” | The connection predates the sitemap-submission scope | Reconnect Google on that row and re-consent |
| Site knowledge is amber | The crawl was truncated, or the site is a client-rendered shell | Use Retry site crawl. A client-rendered shell needs server-side rendering or knowledge sources added by hand |
| Keyword Gap shows nothing, or “Add a competitor to compare” | No competitors are selected and none could be defaulted | Type up to four competitor domains and Compare. Pin competitors under Strategy → Research → Evidence so defaults work next time |
| Use with Claude is disabled, or Send fails | More than 25 keywords are selected, nothing is selected, there is no linked project, or the terminal is not configured | Reduce to 25 or fewer, link a project, or use Copy prompt |
Autoblog, publishing and reporting
| Symptom | Cause | Fix |
|---|---|---|
| A scheduled post never starts and the card says the draft is waiting | The desktop runner is preferred and no bound, current desktop app is open | Open the desktop app, sign in, bind the project folder, and use Check again. Or enable cloud fallback, which uses API credits |
| The post shows as published but the page 404s | The commit landed and the site repository's own deploy failed | Follow Open the failed run, fix the repository and push. The post goes live with the next successful deploy |
| Deploy status reads unavailable with no failed run linked | The GitHub App installation lacks Actions: Read on the repository | Grant it, then wait for the next re-check |
| Posts stop at a pull request | The schedule's publish mode is Review PR, or approval mode is Review required | Set publish mode to auto-merge or direct push, and approval mode to trusted auto-publish |
| Nothing publishes and the error mentions GitHub | There is no valid GitHub App credential for the workspace | The account owner installs or repairs the GitHub App on the GitHub tile in Settings → Integrations |
| Topics are generic and the card reads Limited SEO evidence | No cached SEO opportunities exist for the site, so it fell back | Run SEO setup and research, then use Preview topic ideas |
| “Ban list is full (50 topics).” | The per-schedule banned-topics cap is 50 | Remove a phrase in Edit autopilot before adding another |
| The monthly report never generates | Reporting is off, the Reports lane is paused, or the scheduler parked it after three failed runs | Set a reporting mode, resume the Reports lane, and use the month card's run button |
| The report day of month will not save | The value is blank or outside 1–28 | Enter 1 to 28 |
| The report's public link does not exist | The report was never attached, was detached, or the link was opened on another workspace's host | Attach it from Results → Reports, and share the link on your own client-portal domain |
| Delivery QA shows QA blocked on an unattached report | The public route check cannot pass before the first attach | Approve and deliver; the attach-only checks resolve afterwards |
Builder
| Symptom | Cause | Fix |
|---|---|---|
| Terminal, live preview or git buttons are inert | The Builder terminal service is not configured for this deployment, so those surfaces are deliberately dormant | Use the storage-mode editor and GitHub-side workflows. Ask Zyan about the terminal service |
| A fix stays queued and never runs | No bound desktop currently advertises the local fix capability | Open the desktop app with the project bound and up to date. The desktop never pushes directly |
| A Builder Automation shows Waiting for desktop | Local schedules run only in the desktop app with the folder bound | Leave the desktop app open and signed in through the scheduled time |
Content Center
| Symptom | Cause | Fix |
|---|---|---|
| The AI ideas button is greyed out | The workspace AI generation switch is off | Create and edit posts manually. Ask Zyan to enable AI writing — there is no self-serve toggle |
| A whole tab is missing | Each tab has its own permission key, and the workspace content switch also has to be on | Ask the owner for the matching Content Center permission |
| An amber banner says an account needs reconnecting | A connected Facebook Page, Instagram account, LinkedIn profile or Google Business Profile lost its token | Log in again from Settings → Integrations. Dismissing only hides it for this browser session |
| Approve and Reject are disabled and the row reads Content changed | The post was edited after approval was raised, so the client approved a different version | Re-send it for approval |
| Publishing readiness shows a missing step although the account is connected | Publishing needs three things: the Meta permission, the workspace publishing switch, and a default account | Read the three chips on Accounts → Posting → Publishing |
Outbound
| Symptom | Cause | Fix |
|---|---|---|
| “Physical mailing address required.” | Anti-spam law requires a postal address and none is saved | Outbound → Settings → Automation controls → Sends, save, and retry |
| A campaign reports completed but nothing was sent | Every recipient is unsubscribed or suppressed | Check the list for unsubscribed contacts and pick a different audience |
| Open and click rates sit at 0% | The campaign sent from a Gmail or Microsoft mailbox, where opens are not reported | Only unsubscribes are meaningful for mailbox sends. Use the marketing domain sender for tracking |
| A sequence will not activate | It needs at least one step, at least one attached audience, and a saved mailing address | Add all three |
| Sequence emails stay queued | Master pause is on, the dispatcher stage is off, no mailbox has outreach sending on, the send window is closed, or the daily cap is spent | Check Outbound → Settings → Status first, then the dispatcher, then the mailbox |
| A mailbox shows Deliverability hold | Five or more bounces, or two or more spam complaints, in seven days | Investigate on the mailbox sheet, then Mark investigated |
| A mailbox sends far fewer than its daily cap | It is on a warmup ramp, so the effective cap is lower | The row shows sent against effective cap. Use Warmup → Advance, or Boost daily cap for 24 hours |
| Client replies do not appear in Replies | Replies lists outreach threads only | Use the general inbox. Nothing is broken |
| Smartlead keeps sending after the master pause | The master pause covers the Zyan outreach plane only | Pause the campaign in Outbound → Smartlead, or in Smartlead. Stop is irreversible |
Messaging and announcements
| Symptom | Cause | Fix |
|---|---|---|
| An announcement reports far fewer recipients than expected | Per-channel skips: no phone number, no portal user, marketing opt-out, an opted-out conversation, blocked, a deactivated SMS line, exhausted email credits, no email on file, or muted in the recipient's own settings | Read the skip breakdown in the confirm modal before sending, and on the announcement afterwards |
Finance and bookkeeping
| Symptom | Cause | Fix |
|---|---|---|
| “Connect QuickBooks to enable Bookkeeping.” | There is no QuickBooks connection, or a member is viewing it — only the owner can connect | The owner connects it in Settings → Integrations → QuickBooks |
| “The last QuickBooks sync did not finish.” | Intuit raised an error — an expired token, a revoked app, or a transient fault | Fix in settings, then Test, then reconnect if the token was rejected, then retry the sync |
| The status chip reads Paused and Sync is greyed out | The QuickBooks integration switch is off, so neither manual nor hourly syncs run | Turn the integration back on, then sync |
| Numbers only go back a few weeks | Balance snapshots are built sync by sync. History before your first sync does not exist | Nothing to fix. Coverage grows as auto-sync runs |
| A member sees “Bookkeeping access required” | They lack the bookkeeping permission | The owner grants it on their team profile |
Payroll
| Symptom | Cause | Fix |
|---|---|---|
| Run payroll is disabled or creates nothing | Every eligible member already has a statement for the period, so the missing count is zero | Check the period navigator, and the Excluded from payroll section |
| A member is missing and their pay page is empty | They are marked excluded from payroll | Expand Excluded from payroll and Include them |
| Clock times look wrong, or “Payroll timezone not set” | The payroll timezone was never set, so everything falls back to UTC | Set it in Settings, or use Work timezone on the individual's payroll detail |
| “Approve with unsynced hour changes?” | Timesheet hours changed after the statement's pay items were built | Re-sync hours from the member's Hours tab before approving |
Billing and Stripe
| Symptom | Cause | Fix |
|---|---|---|
| A catalog plan reads Needs sync, or reconcile reports drift | The plan was edited in Zyan or in Stripe and the two copies disagree | Run Stripe reconcile to see the differences, then use the plan's sync action |
| Bill this client cannot be started, or the Billing tabs are empty | No Stripe account is connected, you lack billing edit, or you are in the iOS admin shell where the wizard is hidden | Connect Stripe as the owner, grant the permission, and run the wizard from a browser or the desktop app |
Analytics
| Symptom | Cause | Fix |
|---|---|---|
| “No Google Analytics properties selected yet” although Google is connected | The connection exists but no GA4 properties were ticked | Settings → Integrations → Google Analytics: load properties, tick them, choose a Search Console site, save |
| A member cannot open Analytics at all | The Analytics page is owner-only and redirects everyone else | Share reports another way — client-facing analytics lives in the client portal, and the dashboard widget covers a quick trend |
Zyan AI
| Symptom | Cause | Fix |
|---|---|---|
| The Zyan AI nav entry or the dock icon is missing | A missing plan feature, a missing permission, or the per-workspace rollout flag is off | The owner enables it for the plan and the role. If both are right, the workspace flag still has to be switched on by Zyan |
| Attaching a photo fails, or the paperclip is missing | The image is over roughly 3.5 MB, more than eight files were added, or you lack the Files create and view permissions | Shrink the image, keep to eight files per message, and ask the owner for the Files permissions |
Voice agents
| Symptom | Cause | Fix |
|---|---|---|
| “The organization emergency stop is active.” | Someone activated the workspace emergency stop, which blocks every launch | Clear it in Settings → Voice & Telephony → Emergency stop, then re-run preflight |
| “The selected agent version is not published.” | The campaign points at a draft | Open the agent, save and Publish, then re-select it on the campaign |
| “No AI disclosure text is configured.” | The agent version's Honest disclosure wording is empty | Fill it in and publish a new version |
| “No recording policy is configured for the organization.” | The workspace recording policy was never chosen | Set it in Settings → Voice & Telephony |
| “Transfer is enabled but no destination number is configured.” | Allow human transfer is on with an empty destination | Fill in the destination, or turn transfer off |
| “Cold consumer AI telemarketing is denied by default policy.” | The audience is classified as consumer cold, which is default-deny with no in-app override | Use consent-backed leads, internal test numbers, or a counsel-approved B2B classification |
| Approve is greyed out: “Run a passing preflight first.” | No passing preflight result exists yet | Run preflight, resolve every error-level check, then approve |
| The Approve dialog will not submit although nothing is failing | Warnings require an exact typed acknowledgment | Type the phrase exactly as shown. It is matched character for character |
| Leads sit at pending and are never dialed | The lead's local time is outside the calling window, the retry cooldown has not elapsed, or the daily cap is reached | Read the Block reason column, then widen the window, lower the cooldown, or raise the cap |
| Leads show blocked as suppressed or opted out | The number is in the opt-out registry, or the lead is do-not-contact | Suppressed leads are never dialed. Remove them, or restore opt-in if it was a mistake |
| Preflight blocks saying live calling is disabled | The platform voice gates are in their safe default posture | Live dialing is armed at the platform level, not from the admin UI. Contact Zyan. Meanwhile use simulation or Voice Lab |
Ads
| Symptom | Cause | Fix |
|---|---|---|
| A budget change is excluded from Apply as exceeding a money guard | The new daily budget is above the cap, or too large a multiple of the current one, or a CPC bid is above the ceiling | Lower it, or step it up over several smaller edits. Forcing the row will not work — the server rejects it too |
| The Google Ads tab shows Connect a Google Ads account | There is no OAuth connection, or it needs reconnecting or a manager account chosen | Complete the owner OAuth in Settings → Integrations → Google Ads. The card's pill says which |
Automations and webhooks
| Symptom | Cause | Fix |
|---|---|---|
| An automation is saved but never fires | It is still a draft, or a step's integration is not connected so publishing was blocked | Check the top bar for Draft differs from live and the blocker tooltip on Enable, connect the flagged integration, then enable |
| A webhook sender gets a 401 or 404 | The token is wrong — an unknown endpoint and a wrong token look identical — or someone rotated the address, which invalidates the old one immediately | Re-copy the address from Settings → Integrations → Webhooks, rotating again if the value was lost, and paste it into the sending tool |
| A form-scoped automation never fires | Those leads came from the raw capture endpoint, which carries no form id | Use an unscoped lead created trigger |
Still stuck?
If your symptom is not here, check what Zyan does not do yet before anything else — a good number of “it is broken” reports are a feature that needs an owner to arm it, or one that is not built.
Then contact support.
In this section
What is gated, owner-only, waiting on Zyan to arm it, or not built yet.
Getting the best out of ZyanThe habits that stop the most common mistakes before they happen.
Contact supportHow to reach the Zyan team, and what to put in the message.