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.