← Branch Contact Groups

Migration Plan — 50 Contact Groups → BM Memberships

Outlook contact groups have no export/API. This is copy-paste, done once per group, with a grid-view paste at the end to avoid adding ~500 rows by hand.

Step 1 — Create the group shells first

Before touching any members, create all 50 rows in BM Groups (just the group names). This is small enough to do as a single grid-view paste: type your 50 group names into one column in Excel, open BM Groups in the browser, switch to grid view (the grid/pencil icon above the list, or View → "Edit in grid view"), and paste the column straight into the Title column. Set ThursdayBatch to Batch 1 or Batch 2 for the known Thursday groups afterwards — either in grid view, or faster, just use the app's own Manage Groups screen once it's built (pencil icon → pick the batch from the dropdown).

Step 2 — Extract members from one contact group

  1. In Outlook desktop (not the web version — contact group editing needs classic Outlook), open the shared zero mailbox's Contacts, double-click the contact group to open it in its own window.
  2. Click into the Members list area, press Ctrl+A then Ctrl+C.
  3. Paste into a single blank cell in Excel. Outlook typically pastes the whole list as one text blob, members separated by semicolons, each in the form Name <email@domain>.

Step 3 — Split the blob into rows and columns

  1. Select the cell → Data → Text to Columns → Delimited → Semicolon. This spreads the members across one row of columns.
  2. Copy that row → Paste Special → Transpose into a new area, to turn it into one member per row instead of one per column.
  3. With each member now in its own cell as Name <email>, add two helper columns next to it:
    Name:  =TRIM(LEFT(A1,FIND("<",A1)-1))
    Email: =TRIM(MID(A1,FIND("<",A1)+1,FIND(">",A1)-FIND("<",A1)-1))
  4. Add a third column, GroupName, and fill it down with the exact group name you used in BM Groups.Title for this group.
Watch for X.500/Exchange DN addresses instead of real email addresses — something like /O=EXCHANGE/OU=.../CN=RECIPIENTS/CN=jbloggs123 instead of jbloggs@mod.gov.uk. This happens when Outlook has cached a resolved internal directory entry rather than an SMTP address. These can't be BCC'd or used in Graph as-is. When you spot one, look the person up in the GAL by name and manually type their real SMTP email into that row instead.

Step 4 — Repeat for all 50 groups

Build one running Excel sheet with exactly three columns in this order: Title (the person's display name), Email, GroupName. Append each group's cleaned member block underneath the last. By the end you'll have roughly one row per person-per-group — duplicates across different groups are expected and correct (that's the point of the denormalised design).

Step 5 — Paste into BM Memberships

  1. Open BM Memberships in the browser, switch to grid view the same way as Step 1.
  2. Add empty rows in the grid roughly matching your row count first (grid view usually only shows a handful of blank rows at a time — scroll down or add more as needed, or paste in batches of ~100 rows).
  3. Copy your three-column Excel range (no header row) and paste directly into the Title/Email/GroupName columns of the grid. SharePoint grid view accepts a multi-row, multi-column clipboard paste and creates new rows as needed.

Alternative once the app is built: for each group, copy just its Name+Email columns (from Step 3, no GroupName column needed) and use the app's own Replace membership from paste button on Manage Groups → Manage members instead of the SharePoint grid-view paste. It's scoped to the right group automatically, does its own email validation, and logs the import as a history entry — arguably safer than a single giant 500-row grid paste, just done 50 times instead of once. Either path ends at the same result.

Step 6 — Verify

Step 7 — Don't delete the originals yet

Keep the original Outlook contact groups in place for a few weeks while the branch transitions to using the app day-to-day. Once you're confident the counts and addresses match and people are actually using Branch Contact Groups, archive or delete the old contact groups — there's no rush and no downside to running both in parallel for a while.