Why Canva is different from every other "embed Google Calendar" guide
Most guides for embedding Google Calendar tell you to copy an <iframe> and paste it into a code block. That advice is correct for WordPress, Wix, and Squarespace. On a Canva Website it just doesn't apply, and following it is why people end up stuck.
Canva is a visual editor. There is no place to paste HTML. You can't drop in an <iframe>, you can't add a <script>, and there's no "custom code" block waiting in a menu. Canva closed that door on purpose, because letting anyone paste arbitrary code into a hosted site is a security headache they'd rather avoid.
What Canva gives you instead is an Embed element that takes a link. You hand it a URL, Canva fetches that page, and it renders the result inside your design. So embedding Google Calendar in Canva is not a copy-the-code job. It's a copy-the-link job, and the trick is getting the right link and making the calendar public first.
This guide covers the link method step by step, the Canva-specific reasons it sometimes shows a plain card instead of a live calendar, and what to do when displaying a calendar isn't really what you needed. Quick map before the steps:
| What you want | What to use on Canva | Cost |
|---|---|---|
| Show a schedule of events | Google Calendar public link in the Embed element | Free |
| Let people book a time | Google appointment page link, embedded the same way | Free to paid |
| Answer questions and book the visitor | Hosted chat or voice widget, added by link | Paid |
Step 1: Make the calendar public first
A private calendar will never show up on a public website. This is the most common reason a Canva embed renders as an empty box or an error, and it has nothing to do with Canva. Google simply won't show your private schedule to a stranger, which is the correct behavior.
Open Google Calendar on a desktop browser. Hover over the calendar name in the left sidebar, click the three dots, and choose Settings and sharing. Under "Access permissions for events," tick "Make available to public." You'll pick one of two visibility levels:
- See all event details. Visitors read the event titles, times, and descriptions. Use this for a public events or class schedule.
- See only free/busy (hide details). Visitors see which blocks are taken but not what they are. Use this when you want to show availability without telling the world what you're doing at 3pm Thursday.
One habit worth forming: don't make your main personal calendar public. Create a separate calendar called something like "Public Events" or "Shop Hours," put only public items on it, and share that one. Your private life stays private and your website stays clean.
Step 2: Get the calendar's public link
Stay on that same Settings and sharing page and scroll down to the "Integrate calendar" section. Google gives you a few things here. The one most guides point at is the "Embed code," a full <iframe> snippet. On Canva you can't use that snippet directly, but you can use the URL hidden inside it.
You have two ways to get a usable link:
- Copy the "Public URL to this calendar." This opens your calendar as a standalone page. It's the simplest link to hand Canva.
- Or copy the
srcaddress out of the embed code. Inside the<iframe>you'll see something like this:
The part you want is just the address in src, on its own:
That embed?src= URL is the live calendar view. The ctz value is the time zone, so set it to your audience's zone if it differs from yours. Copy that whole link. That single URL is what you'll paste into Canva.
Step 3: Add the Embed element in Canva
Open your site in the Canva editor and go to the page where you want the calendar. There are two ways to reach the Embed tool, and both end in the same place.
The fast way: paste the calendar link straight onto the page. When you paste a URL onto a Canva design, Canva recognizes it and offers an "Embed" option. Click it and Canva tries to render the link as live content.
The menu way: open the Apps panel on the left sidebar (the icon that looks like four squares, sometimes labeled "Apps" or "More"), search for "Embed," and open it. Paste your calendar URL into the field and press the embed button.

Either way, a calendar block should appear on your canvas. Drag it where you want it and pull the corners to resize. Give it real room. A calendar squeezed into a narrow column is hard to read, and the month grid in particular needs width. If it looks cramped, the agenda or schedule view from Google's Customize tool reads better in a tight space, so it's worth setting that before you copy the link in Step 2.
Step 4: Publish and test the way a stranger sees it
Canva does not show embeds the same in the editor as on the live site, and edits don't go public until you republish. So finishing in the editor is only half done.
Click Publish, choose your website option (the free my.canva.site domain or your connected custom domain), and let it go live. Then open the published address in an incognito window.
The incognito part matters more than it sounds. An incognito tab is logged out of your Google account, which is exactly the state your visitors are in. If the calendar shows for you while you're logged in but vanishes in incognito, that's your sharing setting from Step 1 not being public yet. Public changes in Google can take a few minutes to propagate, so give it a moment and reload.
The Canva-specific catch nobody warns you about
Here is the honest part. Canva's Embed element works beautifully for sources it recognizes, like YouTube or Google Maps. For other links it leans on a generic embed service, and Google Calendar sits in a grey area. Most of the time the embed?src= link renders as a live, scrollable calendar. Sometimes Canva shows a plain link card instead: a small box with the page title and a "view" button, not the calendar grid you wanted.
If you get the card instead of the calendar, you have not done anything wrong. It's Canva's embed engine not recognizing the link as something it can render inline. A few things to try, in order:
- Use the bare
embed?src=...URL from Step 2 rather than the longer "Public URL," and remove any extra parameters after the time zone. - Re-check the calendar is fully public in incognito. A half-public calendar sometimes degrades to a card.
- If it still won't render live, accept that this specific link isn't going to embed on Canva and switch to the booking approach below, which uses a link Canva handles more reliably.
This limitation is the real reason Canva calendars frustrate people. The platform trades flexibility for simplicity, and a raw calendar embed is right on the edge of what that trade allows.
If you actually need booking, not just a display
Step back and ask what you wanted the calendar to do. If the goal is to show your hours or your class schedule, the embed above is the whole job and you can stop here.
But a lot of people who search for this want something the plain embed can't do: they want a visitor to pick a time and book it. A displayed calendar can't take a booking. People can stare at it all day and never get onto your schedule.
Google has a built-in answer for simple cases. Open Google Calendar, click Create, and choose Appointment schedule. Set your available hours, the meeting length, and a buffer between slots, and Google produces a booking page. The useful part for Canva: that booking page has its own link, and you embed it with the exact same Embed element from Step 3. Paste the appointment page URL, and visitors can pick an open slot that lands straight on your calendar.
This is free on a personal Google account, with more controls on Workspace plans, and it embeds on Canva more reliably than a raw calendar because it's a self-contained page built to be shared.
It still has real limits. The page is Google's, so it looks like a Google form, not your brand. It only collects whatever fields that form asks for. And it only works for a visitor who already decided to book. Someone who has a question first, "do you cover my area," "how much is this," has nobody to ask, so they leave.
The ceiling every embed shares
Whether you embed a calendar or an appointment page, both share the same limit. They are one-way. They display information and wait. Neither one answers a question, and neither one remembers the visitor who looked and left without booking.
Think about how people actually use a site built in Canva. Most of them are not ready to book the second they land. They have one small question standing between them and a booking. Is next Tuesday open. Do you service my postcode. Is the deposit refundable. A static calendar can't answer any of that, so the unsure visitor, who is most of your traffic, closes the tab and you never know they were there.
That's the gap. The calendar shows your availability, but it can't have the thirty-second conversation that turns a maybe into a booking.
The honest 2026 option for a Canva site
This is the part we built All Calls Done for, so I'll be straight that this section is about our product. It's a chat and voice agent that answers a visitor's questions in your business's words, then books the appointment onto your Google Calendar inside the same conversation.

I'll also be straight about the Canva limitation, because it's the same one that blocks the calendar. On WordPress, Wix, or Squarespace, you add our agent with a single line of <script>, and the floating chat bubble appears in the corner. Canva doesn't allow custom scripts, so that one-line install isn't available there. There's no way around that on a pure Canva Website, and any tool that claims otherwise is glossing over how Canva works.
What you can do on Canva is embed the agent the same way you embed everything else: by link. Each agent has a hosted widget page with its own URL, and you drop that URL into the Embed element from Step 3. The chat and voice assistant then renders inside your Canva page. It's an inline panel rather than a floating bubble, but the substance is the same: it answers questions, captures the lead with the full conversation, and books onto your connected calendar.
Here's how the options actually compare for a Canva site:
| Calendar embed | Google appointment page | All Calls Done (by link) | |
|---|---|---|---|
| Shows your schedule | Yes | Limited | Not the point |
| Answers visitor questions | No | No | Yes |
| Books onto Google Calendar | No | Yes | Yes |
| Captures the lead if they don't book | No | No | Yes |
| Works as chat and voice | No | No | Yes |
| Adds to Canva | By link (can be finicky) | By link | By link |
To be fair, if all you need is to show your hours, the free calendar embed is the right tool and you should use it. The agent is for the case where the bottleneck isn't displaying a calendar, it's answering the question that comes before the booking.
Setting it up on Canva
If you want the booking-and-answering version on your Canva site, the flow looks like this:
- Create your agent and tell it about your business: what you do, your service area, your hours, your pricing basics.
- Upload your FAQs and any documents customers ask about, so it answers in your words.
- Connect Google Calendar through Google's standard consent screen, the same one you've seen on any "Sign in with Google" button, so the agent can read availability and write appointments.
- Copy your agent's widget link from the dashboard.
- In Canva, add an Embed element and paste that link, then resize the panel and publish.
After that the agent handles inbound conversations day and night. You start each morning with a list of who came by, what they asked, and what got booked, already logged.
Troubleshooting on Canva
The embed shows an empty box. Almost always the calendar isn't public yet. Re-check Settings and sharing in Google, confirm "Make available to public" is ticked, and test in an incognito window after a few minutes.
It shows a plain link card, not the calendar. Canva's embed engine didn't recognize the link as live content. Try the bare embed?src= URL, confirm the calendar is fully public, and if it still won't render, use a Google appointment page link instead, which embeds more reliably.
The times look wrong for visitors. The ctz time zone in your link is set to the wrong region. Set it explicitly in Google's Customize tool before copying the URL.
It's fine on desktop but cramped on a phone. Canva sites resize for mobile, but a wide month grid still gets tight. Switch the calendar to the agenda or schedule view in Google's Customize tool, which reads better narrow.
I pasted a <script> and nothing happened. Canva doesn't run custom scripts. There's no code block on a Canva Website, so any HTML or JavaScript snippet has to be replaced with a link-based embed.
Frequently asked questions
Can you paste iframe code into a Canva Website? No. Canva has no custom HTML or code block. You embed by pasting a link into the Embed element, and Canva renders the page for you.
Is embedding Google Calendar on Canva free? Yes. The calendar display embed and Google's appointment scheduling are free on a personal account, with extra controls on Workspace plans. Canva's Embed element is available on free Canva sites too.
Why does my calendar show as a card instead of a grid? Canva's embed engine didn't recognize the link as live content. Use the bare embed?src= URL and make sure the calendar is fully public. If it persists, embed a Google appointment page instead.
Can visitors book a time from the embedded calendar? Not from a plain display embed. For booking you need a Google appointment page or a booking widget, both added to Canva by link.
Can I add a chat widget to a Canva site? Not the floating-bubble kind, since that needs a script Canva won't run. You can embed a hosted widget's link inside the page, which gives you the chat and voice agent as an inline panel.
The short version
Canva Websites have no code block, so the usual <iframe> advice fails. Make your Google Calendar public, copy its embed?src= link, and paste that link into Canva's Embed element, then publish and check it in incognito. If Canva shows a card instead of the grid, that's the platform's embed engine, and a Google appointment page link is the more reliable fallback.
The bigger decision is the same on Canva as anywhere. A calendar displays. An appointment page takes a simple booking. An agent answers the question that comes before the booking and catches the lead who would otherwise leave. Pick based on whether your problem is showing a schedule or starting a conversation.
Try All Calls Done free for 14 days. No credit card required.



