> ## Documentation Index
> Fetch the complete documentation index at: https://help.revenuehero.io/llms.txt
> Use this file to discover all available pages before exploring further.

# How does Prevent Duplicate Logging work?

> Why RevenueHero waits before writing meeting activities to your CRM, and what to do if activities are slow to appear.

A rep books a meeting through RevenueHero. Ten minutes later, the meeting activity still isn't on the contact in HubSpot or Salesforce. Nothing is broken. **Prevent Duplicate Logging** is doing exactly what it should: holding off so your CRM's own calendar sync gets the first attempt at logging the activity. If both systems wrote at once, you'd end up with two records for the same booking, and your activity reports would lie.

This article explains how the setting works, when activities show up, and how to switch behavior if you'd rather log immediately.

<Note>
  **BEFORE YOU BEGIN**

  Make sure you have:

  1. [HubSpot](/crm/hubspot/overview) or [Salesforce](/crm/salesforce/overview) connected to RevenueHero
  2. **Admin** access in RevenueHero
  3. Each rep's calendar (Google or Outlook) connected to **both** RevenueHero and the CRM
</Note>

## Why duplicates happen in the first place

When a meeting is booked through RevenueHero, two independent systems both want to log a meeting activity on the same contact:

| System                         | What it does                                                                                                                                        |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **RevenueHero → CRM**          | Pushes the meeting activity through the CRM integration along with meeting type, status, router name, and custom fields.                            |
| **CRM's native calendar sync** | Watches the rep's connected Google Calendar or Outlook. When a new event appears, the CRM creates its own meeting activity on the matching contact. |

If both systems log the meeting, you get two activities for the same booking. That inflates meeting counts, breaks pipeline reporting, and forces reps to clean up the timeline by hand.

## How Prevent Duplicate Logging works

When the setting is on, RevenueHero takes a deliberate pause before writing the activity:

1. Waits about 10 minutes after the meeting is booked
2. Checks for an activity logged by any other source in your CRM
3. Doesn't log the activity if a match is found
4. Logs the activity itself if nothing was found

The end result: one clean meeting activity per booking, enriched with RevenueHero context.

## Set it for HubSpot

### Step 1: Open the HubSpot integration

1. In the left sidebar, click **Settings → Integrations**
2. On the **HubSpot** card (marked **Connected**), click **Configure**

<Frame>
  <img src="https://mintcdn.com/revenuehero/YQ0d4QEIiyQdTe71/images/crm/hubspot/prevent_duplicate_logging_hubspot_integrations.png?fit=max&auto=format&n=YQ0d4QEIiyQdTe71&q=85&s=76cb760da480915a57f813eb942110e9" width="2880" height="1800" data-path="images/crm/hubspot/prevent_duplicate_logging_hubspot_integrations.png" />
</Frame>

### Step 2: Choose your logging behavior

In the **Ensure accurate meeting logs in HubSpot activities** card, pick one of two options:

| Option                        | What it does                                                                                                                         |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **Prevent duplicate logging** | Waits \~10 minutes, then logs only if HubSpot hasn't already. Default for accounts where every rep has HubSpot calendar sync set up. |
| **Log anyways**               | Writes the activity immediately on every booking. Use when HubSpot's calendar sync isn't reliable across your team.                  |

<Frame>
  <img src="https://mintcdn.com/revenuehero/YQ0d4QEIiyQdTe71/images/crm/hubspot/prevent_duplicate_logging_hubspot_dedup_card.png?fit=max&auto=format&n=YQ0d4QEIiyQdTe71&q=85&s=23b12b0cf434e9d39015e9214e76162d" width="1212" height="842" data-path="images/crm/hubspot/prevent_duplicate_logging_hubspot_dedup_card.png" />
</Frame>

<Tip>
  Have every HubSpot user connect their personal Google or Outlook calendar inside HubSpot (under **Profile & Preferences → Calendar**). When HubSpot can see the calendar event directly, it logs the activity within seconds. RevenueHero then sees the existing log and skips, so reps see no delay.
</Tip>

## Set it for Salesforce

### Step 1: Open the Salesforce integration

1. In the left sidebar, click **Settings → Integrations**
2. On the **Salesforce** card (marked **Connected**), click **Configure**

<Frame>
  <img src="https://mintcdn.com/revenuehero/YQ0d4QEIiyQdTe71/images/crm/salesforce/prevent_duplicate_logging_salesforce_integrations.png?fit=max&auto=format&n=YQ0d4QEIiyQdTe71&q=85&s=9cb5156c0ecd573b4fdb2676b1313061" width="2880" height="1800" data-path="images/crm/salesforce/prevent_duplicate_logging_salesforce_integrations.png" />
</Frame>

### Step 2: Choose your logging behavior

The same **Ensure accurate meeting logs in Salesforce activities** card appears. Pick one of two options:

| Option                        | What it does                                                                                                                                                 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Prevent duplicate logging** | Waits \~10 minutes, then logs only if Salesforce hasn't already. Use this when Einstein Activity Capture or another sync is also writing meeting activities. |
| **Log anyways**               | Writes the activity immediately on every booking. Use this when no other tool is logging meeting events to Salesforce.                                       |

<Frame>
  <img src="https://mintcdn.com/revenuehero/YQ0d4QEIiyQdTe71/images/crm/salesforce/prevent_duplicate_logging_salesforce_dedup_card.png?fit=max&auto=format&n=YQ0d4QEIiyQdTe71&q=85&s=aba61306aad131282c029d187a1f66a5" width="1196" height="802" data-path="images/crm/salesforce/prevent_duplicate_logging_salesforce_dedup_card.png" />
</Frame>

<Tip>
  On Salesforce, the most common second source of meeting activities is **Einstein Activity Capture** (EAC). If you have EAC on for the same users RevenueHero is booking for, keep **Prevent duplicate logging** on. If EAC is off, switch to **Log anyways** so reps see activities the second they're booked.
</Tip>

## Why some activities take hours to show up

The setting waits \~10 minutes before logging. If activities are still missing 30 minutes, an hour, or longer after a booking, the cause is almost always the same: **a rep's calendar isn't connected to the CRM**, only to RevenueHero.

When that happens:

1. RevenueHero books the meeting and writes it to the rep's calendar
2. Nothing on the CRM side ever sees the new event (the calendar isn't connected)
3. RevenueHero waits its window, sees no log, then writes the activity itself

So the activity does eventually appear, but only after the wait, and you may see CRM-side delays of several hours if **CRM-native calendar sync was supposed to log first but never could**.

Common patterns:

* **New hires** added to RevenueHero who never completed CRM calendar setup
* **Reps who switched calendar providers** (Google → Outlook) and reconnected in RevenueHero but not in the CRM
* **CRM calendar sync silently disconnected** after an OAuth token expired

<Warning>
  CRM calendar connections expire when the underlying OAuth token is revoked (after a password reset, a forced re-auth, or a long inactive period). Reps don't get notified. Add a quarterly check to your RevOps playbook to confirm every rep's calendar is still connected in the CRM, not just in RevenueHero.
</Warning>

## When to keep it on, when to turn it off

| Scenario                                                                              | Recommended setting                                                                                  |
| ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Every rep's calendar is connected to both RevenueHero and the CRM                     | **Prevent duplicate logging** — clean activity timeline, no duplicates                               |
| You use CRM workflows triggered by meeting activities and need them to fire instantly | **Log anyways** — accept duplicate risk to remove the wait                                           |
| Mixed: some reps connected to the CRM, some not                                       | **Log anyways** during rollout, then switch to **Prevent duplicate logging** once everyone is set up |
| You don't use the CRM's native calendar sync at all                                   | **Log anyways** — there's nothing to deduplicate against                                             |

***

Your meeting activities now flow into HubSpot and Salesforce on terms you set. Clean timelines, accurate reports, no surprise duplicates. 🎉🎉🎉

<CardGroup cols={2}>
  <Card title="Integrate HubSpot" icon="plug" iconType="solid" href="/crm/hubspot/overview">
    Connect HubSpot to RevenueHero in three steps.
  </Card>

  <Card title="Integrate Salesforce" icon="plug" iconType="solid" href="/crm/salesforce/overview">
    Connect Salesforce to RevenueHero with OAuth.
  </Card>

  <Card title="HubSpot CRM fields" icon="table-list" iconType="solid" href="/crm/hubspot/crm-fields">
    Every field RevenueHero writes to HubSpot.
  </Card>

  <Card title="Salesforce CRM fields" icon="table-list" iconType="solid" href="/crm/salesforce/crm-fields">
    Every field RevenueHero writes to Salesforce.
  </Card>
</CardGroup>
