Automatically referencing the same part of many notes

What I’m trying to do

I have my daily notes template set up with several sub headers for different uses, I have my daily list to remind me to do stuff, I have an activity tracker, and I have a general purpose journal section. What I’d like to be able to do is review each of these sections aggregated across different ranges of time, for example, pull out all my journal entries for a given month and list them in a single note by date, without the other stuff in each daily note. Or the same for my activity tracking over say each week.

It definitely feels like this is a problem someone else should have had and solved by now, but I’ve looked all morning and found nothing.

Things I have tried

I’ve tried referencing the given header with an internal link in a note property in both bases and dataview, with no success, ie Journal:: ![[2026-06-11#Journal]]

I can of course use that sort of link manually in the note that I want to create, but doing so manually over any length of time would be more tedious than just aggregating the data myself.

I am also aware I could just put all the information I want to aggregate into the properties, but this is a really annoying work around and not really the intended purpose as far as I can tell.

I’ve also tried making a template that automatically propagates with the necessary information, but I either couldn’t figure out how to do it, or the functionality isnt in templates either.

I think DataviewJS is the least awkward way to do this, because a property value will not expand/transclude the section for every daily note. Something like this in a monthly note should pull only the ## Journal section:

const pages = dv.pages("#daily")
  .where(p => p.file.day && p.file.day >= dv.date("2026-06-01") && p.file.day <= dv.date("2026-06-30"))
  .sort(p => p.file.day);
for (const p of pages) {
  const file = app.vault.getAbstractFileByPath(p.file.path);
  const text = await app.vault.cachedRead(file);
  const match = text.match(/^## Journal\n([\s\S]*?)(?=^## |\s*$)/m);
  if (match) {
    dv.header(3, p.file.name);
    dv.paragraph(match[1].trim());
  }
}

Change #daily, dates, and the heading name to match your setup. For activity tracking I’d reuse the same pattern with a different heading, unless the tracker is structured enough that a normal Dataview table makes more sense.