Meeting Title: Northbeam Server-Side Tracking Sync Date: 2025-09-02 Meeting participants: Zoran Selinger, Henry Zhao


WEBVTT

1 00:00:45.890 00:00:48.349 Henry Zhao: Hi, Hannah. Hey, Zaron, how are you doing?

2 00:00:48.350 00:00:50.270 Zoran Selinger: Yeah, good, good. How are you?

3 00:00:50.670 00:00:51.650 Henry Zhao: Good, thank you.

4 00:00:52.680 00:00:55.100 Henry Zhao: Excited to be working together.

5 00:00:55.100 00:00:56.699 Zoran Selinger: Yeah, me too.

6 00:00:56.700 00:01:04.480 Henry Zhao: It was nice meeting you last week, but I just wanted to have a quick call with you today, just to go over the details, and just to make sure that those are kind of in line with your expectations as well.

7 00:01:05.780 00:01:06.919 Zoran Selinger: Sure, sure.

8 00:01:07.080 00:01:10.929 Henry Zhao: Yeah, so obviously the first thing is the edge layer, right?

9 00:01:11.310 00:01:16.010 Henry Zhao: But we also want to make sure that the data we’re sending into Northbeam is server-side.

10 00:01:16.620 00:01:28.299 Henry Zhao: So, I’ve never implemented server-side tracking before, so yeah, we just want to make sure that when we talk to the stakeholders, that we’re telling them that this data is being captured from the server side and not the client side, basically.

11 00:01:28.860 00:01:46.889 Zoran Selinger: Yeah, okay, so we do have two pieces here, and I wanted to discuss this with you. So, we can have, like, we can have the client-side Norbeam tracking, that’s sitting in the client-side GTM.

12 00:01:46.890 00:01:49.640 Henry Zhao: That can be transitioned into the server side.

13 00:01:49.640 00:01:53.940 Zoran Selinger: But that’s the regular stuff, that’s the pixel stuff, right? Right.

14 00:01:54.220 00:01:56.729 Zoran Selinger: That’s a separate thing from the edge.

15 00:01:56.910 00:01:57.859 Henry Zhao: Yeah,

16 00:01:58.010 00:02:00.309 Zoran Selinger: So, in the edge, what…

17 00:02:00.860 00:02:10.990 Zoran Selinger: basically what we need to do. I was looking at Norim API. We really do have only a few things that we can do.

18 00:02:12.010 00:02:12.800 Henry Zhao: Okay.

19 00:02:14.310 00:02:25.220 Zoran Selinger: very few endpoints for… for… for their API. I’m gonna tell you exactly. So we have slash orders.

20 00:02:25.620 00:02:36.879 Zoran Selinger: We have slash spend, And… data export breakdowns, metrics, and attribution models. So really, the only thing that is…

21 00:02:37.110 00:02:39.979 Zoran Selinger: Applicable here, directly.

22 00:02:41.000 00:02:48.659 Zoran Selinger: This is the… the orders, right? And we have orders version 2 endpoint. Here’s the link in the chat.

23 00:02:53.240 00:02:59.469 Zoran Selinger: So, this is… this is what we can potentially do from the edge. However…

24 00:03:00.510 00:03:04.090 Zoran Selinger: If we’re doing this on the edge,

25 00:03:04.610 00:03:11.400 Zoran Selinger: So, if this happens on our conversion event. Our UTMs?

26 00:03:12.140 00:03:19.430 Zoran Selinger: are not going to be there anymore, because the UTM sits on the landing page, and then when you navigate away.

27 00:03:19.620 00:03:32.850 Zoran Selinger: It’s not in the URL anymore. So, when we get to, some kind of order, event, in this case, this is what, what’s an order, what’s our main conversion here?

28 00:03:34.280 00:03:36.209 Henry Zhao: So, the order completed, yeah.

29 00:03:36.530 00:03:41.900 Zoran Selinger: It is, it is. Yeah. Okay, cool. So when that, when that happens.

30 00:03:42.010 00:03:46.539 Zoran Selinger: The UTMs won’t be there. We will have to…

31 00:03:47.310 00:03:51.479 Zoran Selinger: ingested some… somehow. However, I think…

32 00:03:51.580 00:04:02.699 Zoran Selinger: What’s more applicable for them, what they are asking us to do, is we need to be… we need to capture things on the landing page, on the edge.

33 00:04:03.710 00:04:08.840 Zoran Selinger: So that’s… so when I look… look at data here.

34 00:04:09.120 00:04:16.240 Zoran Selinger: And when I look at the endpoints here, there’s nothing really applicable to the visit.

35 00:04:16.440 00:04:26.449 Zoran Selinger: event, because that’s a visit event, right? Someone visited, just landed on our site. So, it… I don’t think it’s appropriate to send an order

36 00:04:28.610 00:04:31.020 Zoran Selinger: event directly, so…

37 00:04:32.260 00:04:40.540 Zoran Selinger: What… maybe the only thing to do there on the edge for the landing page is just to save

38 00:04:41.050 00:04:48.090 Zoran Selinger: UTMs, and whenever IP address… I think it’ll have to be IP address on the edge, because.

39 00:04:48.090 00:04:51.210 Henry Zhao: What about segment? What about using segment with the anonymous ID?

40 00:04:51.760 00:04:56.030 Zoran Selinger: I mean, on the Edge, we do not load the page yet.

41 00:04:57.630 00:05:16.340 Zoran Selinger: We do not load the page yet, so we don’t have… we are not initializing any pixels, any IDs from the any pixel implementation. That’s not yet initialized. So the only identifier, really, that we have is the IP address, I think, on the edge, because we… we haven’t loaded anything yet.

42 00:05:16.680 00:05:18.430 Zoran Selinger: We just got a request.

43 00:05:19.090 00:05:22.390 Zoran Selinger: Now we decide what we want to do with the request.

44 00:05:22.390 00:05:35.019 Henry Zhao: I guess IP should be good enough, right? Because the only way that this would be broken is if, after loading, they switch to a different browser, or something like that, to change the IP address. Otherwise, we’re tracking the same flow.

45 00:05:35.220 00:05:35.940 Henry Zhao: Right?

46 00:05:36.460 00:05:46.600 Zoran Selinger: I mean, if they have nothing in terms of stitching at the moment, then this will be… I mean, just having IP is a huge improvement, of course. Yeah.

47 00:05:48.690 00:05:56.720 Henry Zhao: I’m thinking, I mean, we can do anything we want with the request itself, okay? So, if it’s going through the edge.

48 00:05:57.360 00:06:01.970 Zoran Selinger: We can maybe initialize an ID,

49 00:06:02.470 00:06:09.369 Zoran Selinger: We can generate an ID that we can use to, when initializing peak cells.

50 00:06:09.520 00:06:28.099 Zoran Selinger: when the… when it actually loads. So that’s also doable, okay? So let’s say we, instead of just IP, we initialize… we initialize some kind of… some kind of ID that’s alphanumeric, 15, 16 characters, whatever, right? Just a normal hash.

51 00:06:29.270 00:06:32.890 Zoran Selinger: when you load, for example, a Google Analytics pixel.

52 00:06:33.000 00:06:36.840 Zoran Selinger: you can… you can choose the client ID.

53 00:06:38.140 00:06:52.879 Zoran Selinger: that’s sometimes browser ID, I don’t know what exactly how segment and Norbin calls it, browser ID or whatever. So, you can set it up, you don’t have to… it doesn’t have to be auto-generated, right?

54 00:06:53.290 00:06:57.180 Zoran Selinger: You can actually set it up. We can create that ID,

55 00:06:57.440 00:07:02.259 Zoran Selinger: and use it inside GTM, in pixels, we can just

56 00:07:02.670 00:07:09.989 Zoran Selinger: we can append it to the query, to the query parameter. So we’ll have UTMs, but we can add an ID.

57 00:07:10.110 00:07:12.620 Zoran Selinger: And then use it to initialize the pixels.

58 00:07:13.490 00:07:21.020 Zoran Selinger: So that’s also an option. There’s then stitching happening automatically there, right?

59 00:07:21.180 00:07:22.170 Henry Zhao: Yeah.

60 00:07:23.450 00:07:30.980 Zoran Selinger: So, we need, kind of, we need to figure that out. So, in terms of…

61 00:07:31.200 00:07:35.240 Zoran Selinger: So, it’s easy to use the edge.

62 00:07:35.380 00:07:45.580 Zoran Selinger: to just save data to BigQuery with the UTMs and IP address, and then, obviously, data modeling, we will do its work in terms of…

63 00:07:45.580 00:07:45.960 Henry Zhao: then…

64 00:07:45.960 00:07:46.920 Zoran Selinger: Absolutely.

65 00:07:47.270 00:07:50.699 Henry Zhao: But if we send it to BigQuery, we could probably use Segment to do some stitching, right?

66 00:07:51.880 00:07:58.740 Zoran Selinger: I mean, you, you’re more versed in segment than I am, but yes.

67 00:07:58.740 00:08:07.699 Henry Zhao: We do the initial bridge of the edge layer by IP address to the first time the segment pixel fires, and then beyond that, we use the anonymous ID to continue to…

68 00:08:07.990 00:08:09.520 Henry Zhao: Stitched together, basically.

69 00:08:09.720 00:08:17.849 Zoran Selinger: Yeah, but I think the… I still think maybe the best thing to do is recreate our IDs.

70 00:08:17.850 00:08:18.530 Henry Zhao: Okay.

71 00:08:18.530 00:08:20.280 Zoran Selinger: And we initialize them.

72 00:08:20.280 00:08:22.250 Henry Zhao: If you know how to do that, then yeah, perfect.

73 00:08:22.250 00:08:26.470 Zoran Selinger: I mean, that’s… that has to… that… that could be…

74 00:08:26.610 00:08:31.469 Zoran Selinger: great, right? And we know that, I mean, for example.

75 00:08:31.830 00:08:36.700 Zoran Selinger: I presume Norbeam has some kind of identifier, right?

76 00:08:36.770 00:08:39.669 Henry Zhao: It can be the same for everything that we…

77 00:08:39.669 00:08:46.599 Zoran Selinger: Everything that we visualize, every pixel that we need, even Google Analytics can have the same one.

78 00:08:46.890 00:08:48.440 Henry Zhao: Yeah, that would be great.

79 00:08:49.100 00:09:00.450 Zoran Selinger: So that’s… that’s one idea. I mean, I’m not familiar with the data model that the… that the client has at the moment, but,

80 00:09:00.680 00:09:04.709 Zoran Selinger: I just kind of wanted to communicate that that is an option.

81 00:09:04.710 00:09:05.300 Henry Zhao: Yeah, okay.

82 00:09:05.300 00:09:14.809 Zoran Selinger: That will require, though, that will require, a little bit of, this is not just work on the edge.

83 00:09:15.300 00:09:21.340 Zoran Selinger: in the Cloudflare worker, it’s also work in GTM.

84 00:09:21.830 00:09:30.439 Henry Zhao: So that was my next question. Yeah, so my next question is, this is what Robert was asking on Friday, is do you have extra hours to also help us manage the GTM?

85 00:09:30.960 00:09:33.640 Zoran Selinger: So basically, the person that was managing GTM.

86 00:09:34.100 00:09:44.139 Henry Zhao: We don’t think that he’s, like, the best at it, so we were hoping that you can also just, while you’re doing this project, also, you know, get some extra hours working on the GCM stuff.

87 00:09:44.370 00:09:51.299 Zoran Selinger: Yeah, I mean, last 2 weeks, I was doing less than 10 hours a week, and I do have 20.

88 00:09:51.520 00:09:53.750 Zoran Selinger: So, I have capacity.

89 00:09:54.260 00:10:02.999 Henry Zhao: Yeah, okay, great, thank you. So obviously Robert makes these decisions, but I’m here to just give you the context and make sure that we’re aligned on that you know what we want.

90 00:10:03.000 00:10:03.980 Zoran Selinger: Yeah.

91 00:10:04.210 00:10:10.130 Henry Zhao: And then, other than that, we’ll just be working together, and hopefully, I think I might even get you in touch with the client directly.

92 00:10:10.400 00:10:18.779 Henry Zhao: Just to understand from them their concerns. Because right now, they’re kind of, like, this, like, overprotective mother of their data, where they’re, like, so worried about all these things.

93 00:10:18.900 00:10:27.780 Henry Zhao: And I’m wondering, maybe, if you talk to them directly, they will feel more comfortable, because I don’t think they were very comfortable with some of the previous work that was being done, just that…

94 00:10:27.780 00:10:33.390 Zoran Selinger: Oh, right, okay, okay, what’s, what’s been done so far? Can you… can you tell me that?

95 00:10:33.800 00:10:37.379 Henry Zhao: We were just, like, tracking the purchases, but it was, like, not tracked properly.

96 00:10:37.640 00:10:52.710 Henry Zhao: So then customer acquisition was off, like, so there were errors being made, there were delays on this, like, server-side tracking implementation, so people have not been happy, and so we’re hoping to bring someone on like you to help, kind of, make things better, yeah.

97 00:10:53.370 00:11:06.429 Zoran Selinger: Okay, okay, cool. Yeah, let’s, let’s have a look. I mean, Robert was asking, about my capacity last week. I told him I’m on board if you want me.

98 00:11:06.440 00:11:17.909 Zoran Selinger: Sounds like an interesting, interesting things with a little few things. I’ll learn things as well, which is, to me, always a big plus. So yeah, I want to help. I want to help.

99 00:11:17.910 00:11:18.840 Henry Zhao: Okay, great.

100 00:11:18.840 00:11:25.549 Zoran Selinger: Thank you, so I’ll update Robert, and then we’ll, hopefully get to move forward as quickly as possible. Sure, excellent. Okay.

101 00:11:25.550 00:11:26.850 Henry Zhao: Thank you so much. Take care.

102 00:11:26.850 00:11:28.119 Zoran Selinger: Talk soon. Bye.