Generating a Teams meeting link from your calendar

Generating a Teams meeting link takes about four seconds. The trouble starts immediately afterwards, when the event lands in a calendar nobody is looking at, or the link turns out to be the same one used for a different meeting last week, or a guest outside the company gets stuck in a lobby with no one there to admit them.

The link itself is not the interesting part. Where it comes from decides which calendar owns the event, whether the link survives a rescheduled series, and what happens to somebody joining from a browser on a laptop that has never had Teams installed. Those three questions are worth answering before the invitation goes out.

A meeting link is a pointer to one meeting, not to a room

A Teams join link resolves to a single meeting object. That object carries its own chat thread, its own lobby, its own participant roles, and its own recording and transcript if either is turned on. Two people with the same link are in the same meeting, always, regardless of what the calendar entry around it says.

This matters because the link looks like a room number and behaves like a meeting identity. Copying a link out of one event and pasting it into another does not create a second meeting. It points both calendar entries at the same object, which means both sets of guests share one chat history and one lobby.

The link also has a lifetime tied to the event that created it. Delete the calendar event and the link stops working. Move the event and the link is unchanged, which is the behaviour most people want. Cancel one occurrence of a recurring series and the rest of the series keeps the same link, because a series is one meeting object with many scheduled instances.

The practical rule is one meeting object per conversation that needs its own chat. Recurring team standups fit one object. A client call and an internal debrief on the same afternoon need two, even when it feels faster to reuse the link.

The four places a link gets generated

Every route below produces a working join link. They differ in where the event ends up and what the organiser needs to have installed.

Method Where the event lands Link for a series Requirement
Teams calendar, New meeting Exchange or Microsoft 365 calendar One link for all occurrences Teams account
Outlook with the Teams add in Same Microsoft calendar One link for all occurrences Outlook plus the add in
Meet now in Teams Nowhere, unless added manually Not applicable Teams account
Microsoft add on for Google Calendar Google Calendar One link for all occurrences Add on installed, admin may control it

The first two are the same thing seen from two different applications, and both write to the Microsoft side. The third is the one people underuse. Meet now creates a meeting immediately and offers a link to copy, which is exactly right for a conversation that is happening now and does not need to exist in anybody's calendar afterwards. Nothing is scheduled, nothing needs cleaning up.

One thing the table cannot show is what happens to the link when the account changes. A meeting created by a person belongs to that person. When someone leaves the company and the account is deactivated, links they generated stop working, including recurring ones that other people rely on. Standing meetings owned by an individual are a small time bomb in any team, and the fix is to have the meeting created by whoever will still be there, or to recreate the series when ownership changes.

The fourth is the route that matters for anyone whose calendar is not Microsoft's. Microsoft publishes an add on for Google Workspace that adds a Teams meeting to a Google Calendar event, so the event stays in Google and the conferencing details come from Teams. In managed Workspace domains an administrator may have to allow it before it can be installed, and that approval step is where the attempt usually stalls.

When the calendar is Google and the meeting has to be Teams

This is the common shape of the problem: the day lives in Google Calendar, the client or the employer runs on Teams, and every meeting scheduled from the Teams side lands in a Microsoft calendar that gets checked twice a week.

There are three ways through it, and they are not equally good.

The first is the add on described above. The event is created in Google Calendar, the Teams link is attached to it, and there is only ever one calendar to look at. This is the cleanest option when the account is allowed to install it.

The second is scheduling in Teams or Outlook and inviting the Google address as a guest. The invitation arrives as an iCalendar attachment, which Google Calendar can add to the day. It works, and it degrades quietly. Updates sent by the organiser usually flow through, but a copy that has been dragged to a different time on the Google side, or a cancellation that arrives while the mailbox is full, leaves two versions of reality with no warning.

The third is scheduling in Google Calendar and pasting a link generated separately in Teams. It is fast and it is the source of most reused link accidents. If this route is unavoidable, generate a fresh link for each event rather than reaching for the last one in the clipboard.

Whichever route is chosen, one rule keeps the day readable: the invitation goes to one address only. Sending to both a work and a personal address puts two copies of the meeting in the merged view and doubles the reminders. Keeping several accounts visible in one window without that kind of noise is a separate job, and the Features page covers how a desktop calendar handles it.

Reusing a link is reusing the meeting

A copied link is worth calling out on its own, because it fails in a way that looks like a Teams bug.

Two events, same link, scheduled back to back. The first meeting runs long. The second group joins on time and walks into a call that is still in progress, seeing the tail of a conversation they were not part of. The chat panel shows the previous group's messages. Any file shared in the earlier session is visible to the later one.

The same thing happens with recordings and transcripts. They attach to the meeting object, so a series of unrelated calls sharing one link produces one pile of artefacts with no clean boundary between them.

The reason people reuse links is worth naming, because telling them to stop does not remove the pressure. Reuse happens when generating a link requires switching applications. Somebody is already in the Google Calendar event, the link generator is in Teams, and the fastest available action is pasting whatever is still in the clipboard. Anything that makes the correct path as quick as the wrong one solves this better than a rule does, which is the argument for the add on route over the paste route.

There is a legitimate use for a permanent link. A weekly office hour, a standing support channel, an open room that anyone can drop into on purpose. In those cases the shared chat is a feature rather than a leak. Everywhere else, generating a new link costs a few seconds and removes the failure mode entirely.

Set the lobby and the roles before the link goes out

Once the link exists, two settings decide whether an external guest can actually get in.

The lobby setting controls who waits and who joins directly. Defaults vary by organisation because administrators set the tenant policy, so an organiser who has never checked does not know what an outside guest will experience. The failure looks like this: a client clicks the link at the start time, lands in a waiting screen, and stays there because the organiser is not in the meeting yet and nobody else has permission to admit anyone.

The presenter setting controls who can share a screen, mute others, and start a recording. Leaving everyone as a presenter is fine for a small internal call and a poor default for a large external one.

A third setting is worth a look for any meeting with people from more than one company: what the invitation actually says. The body of a Teams invitation carries the join link, a dial in number where one is provisioned, and a block of boilerplate. Guests skim it. If the meeting needs a document read in advance, or a specific room, that instruction has to sit above the link rather than below the boilerplate, because nothing under the join button gets read.

Both are reachable from the meeting options linked in the event, and both are worth setting for any meeting where the guest list crosses a company boundary. For an external guest, also confirm that browser join is available in the situation they will be in. Joining without installing anything is supported in current browsers, but organisations sometimes restrict anonymous join, and finding that out at the start time is expensive.

The link is not the hard part, the time around it is

A meeting link with a start time is not a plan. It is a start time. The schedule fails on the parts that never make it into the calendar: the ten minutes to read the last thread before joining, the walk back from the room, the fact that three calls in a row leave no space to write anything down.

This is where a calendar full of correctly generated links still produces a day that does not work. The link handles the connection. Nothing about it reserves the gap on either side, and Teams will happily place two meetings against each other if the calendar it is writing to has room, because room is defined as an empty grid cell rather than as available attention.

There is a second version of the same problem across time zones. A link works everywhere, so a meeting generated without thinking about where the other side is sitting will be accepted by someone joining at an hour they should not be working. The invitation carries the time zone correctly, which means the mistake is never visible as a wrong time. It shows up as a guest who is quiet for the whole call.

Blocking travel and preparation as real events is the fix, and it is only sustainable if adding them is fast. A calendar app for Mac that puts travel time into the schedule automatically removes the step where good intentions get skipped, and the Travel time section covers what that looks like in practice.

What to change first

Decide where the event lives before deciding how to generate the link, and make that one calendar the only one being read. Then stop reusing links: one meeting, one link, generated fresh, with the lobby setting checked for anything involving an outside guest. If the schedule is in Google and the meetings are in Teams, keeping both in one window on the Mac is what stops the invitation from landing somewhere nobody looks.

Frequently asked questions

Can a Teams meeting link be created without an Outlook calendar?

Yes. Meet now inside Teams generates a meeting and a shareable link without scheduling anything, and a scheduled meeting can be created directly in the Teams calendar. A Google Calendar event can also carry a Teams link through the add on Microsoft publishes for Google Workspace, in which case the event stays on the Google side.

Does a recurring meeting use the same link every week?

Yes. A recurring series is one meeting object with multiple occurrences, so the join link is identical for every instance and stays valid if individual occurrences are moved. The chat thread is shared across the whole series as well, which is usually convenient for a standing meeting and unhelpful for unrelated calls.

Why is an external guest stuck in the lobby?

The lobby setting for that meeting is admitting them to a waiting room, and nobody with permission has admitted them yet. Defaults are set at the organisation level, so they differ between tenants. Changing who can bypass the lobby in the meeting options before sending the invitation avoids the situation entirely.

Is it safe to reuse the same meeting link for different meetings?

It is technically possible and usually a bad idea. Both events point at the same meeting, so the chat history, shared files, recordings, and lobby are shared between the two groups, and anyone joining early can walk into the previous call. Generate a new link for each meeting unless the room is deliberately a standing open one.

Back to all posts