How to pass data from repeating groups to popups in Bubble
Ever built a resource library in Bubble where users click "Download" on a specific item, but your popup shows the wrong file? Or worse, downloads nothing at all?
One of the most common Bubble mistakes is building a popup that isn't properly connected to the repeating group item the user clicked.
Here's the problem: When you create a popup without defining its Type of Content and passing data explicitly through workflows, Bubble has no way to know which resource the user selected. The popup exists in a vacuum, disconnected from your repeating group.
The solution? A three-step process that ensures every popup interaction is tied to the exact item your user clicked.
In this tutorial, I'll show you how to:
- Configure popups to receive dynamic data from repeating groups
- Build workflows that pass the correct resource to your download form
- Capture user information while tracking which resource they're downloading
- Trigger automatic downloads with the right file attached
By the end, you'll have a fully functional gated download system that works reliably every time.
Why your popup doesn't know which item was clicked
Let's say you have a repeating group displaying resources (ebooks, templates, PDFs). Each cell has a "Download" button. When clicked, a popup appears asking for the user's name and email before allowing the download.
The issue: If you haven't explicitly told Bubble which resource the user clicked, your popup has no way to:
- Display the correct resource name in the form
- Download the correct file when they submit
- Log which resource was requested in your database
This happens because popups exist outside the repeating group's context. They're separate elements that don't automatically inherit information from the cell that triggered them.
The fix requires three key configurations:
- Setting the popup's Type of Content
- Using a workflow to pass data from the repeating group cell to the popup
- Referencing that data inside the popup's elements
Let's build this step by step.
| Element | Role | Why it's necessary |
|---|---|---|
Popup Type of Content (Resource) |
Declares what kind of data the popup will hold. | Allows all elements inside to reference a Resource record. |
| "Display data" action | The mechanism for sending the specific record. | Tells the popup which specific Resource record was clicked. |
Parent group's Resource |
The dynamic data reference inside the popup. | Ensures the download action or logging always uses the correct resource's URL and ID. |
Step 1: Set up your data structure
Before we configure the popup, make sure your database is properly structured.
Required data type: Resource
Create a data type called Resource with these fields:
| Field Name | Field Type | Description |
|---|---|---|
| Name | Text | Resource title (e.g., "Legal Tech Automation Guide") |
| Description | Text | Brief description of the resource |
| File | File | The actual PDF/document (if using Bubble storage) |
| FileURL | Text | External URL if hosting on S3, Google Drive, etc. |
| Category | Text | Optional: "Ebook", "Template", "Checklist" |
| CreatedDate | Date | When the resource was added |
Optional data type: DownloadLog
If you want to track who downloads what (highly recommended for lead tracking):
| Field Name | Field Type | Description |
|---|---|---|
| UserEmail | Text | Email address submitted in form |
| UserName | Text | Name submitted in form |
| UserRole | Text | Optional: Job title or company |
| Resource | Resource | The resource that was downloaded |
| DownloadDate | Date | When the download happened |
| IPAddress | Text | Optional: For analytics |
Step 2: Build your repeating group
Before diving into the workflow, make sure your Repeating Group (RG) is set up to display your list of items. Now let's create the repeating group that displays your resources.
Repeating Group configuration
Element: Repeating Group (name it RepeatingGroup Resources)
Settings:
- Type of content:
Resource(or whatever your data type is, e.g.,Product,Service). - Data source: The search query that retrieves your list of resources is
Do a search for Resources - Layout style: Column (or your preferred layout)
- Number of rows: 3 (adjust based on your design)
- Number of columns: 1
Inside each cell
Add these elements to display each resource:
Text element: Resource Name
- Dynamic data:
Current cell's Resource's Name
Text element: Resource Description
- Dynamic data:
Current cell's Resource's Description
Button: Download
- Text: "Download Now" or "Get Free Access"
- Style: Primary button styling
- We'll configure the workflow next
Your repeating group should now display all resources from your database. Next, the popup needs to be configured to receive the data record that is passed to it.
Step 3: Configure the popup
This is where most people go wrong. You must configure the popup to accept data before you can pass it anything.
Create the popup
Element: Popup (name it Popup Download)
Critical setting:
- Type of content:
Resource← This is essential. Set this to the same type as your Repeating Group item. - Data source: Leave this field BLANK. The data will be supplied via a workflow.
Why leave the data source blank? Because you're not hardcoding which resource to show—you're making the popup dynamic so it can receive any resource you pass to it.
Inside the popup
Add these elements:
1. Text: Resource Name (for confirmation)
- Dynamic data:
Parent group's Resource's Name - Style: Heading or emphasized text
- Purpose: Shows the user which resource they're about to download
2. Input: Name
- Input type: Text
- Placeholder: "Your full name"
- Mark as required: Yes (check the box)
3. Input: Email
- Input type: Email
- Placeholder: "[email protected]"
- Mark as required: Yes
4. Input: Role (Optional)
- Input type: Text
- Placeholder: "Your job title"
- Mark as required: No
5. Hidden Custom State (Advanced Option)
If you want to store the resource ID without showing it:
- Add a custom state to the popup
- Name:
CurrentResourceID - Type: Resource
- Purpose: Holds the resource data for the workflow
6. Button: Download Now
- Text: "Download Now"
- Style: Call-to-action button
- We'll add the workflow next
7. Icon: Close
- Purpose: Let users close without downloading
- Workflow: Hide Popup Download
Why "Parent group's Resource" works
When you set the popup's Type of Content to Resource, every element inside the popup can reference Parent group's Resource.
This refers to whatever Resource data you pass into the popup via the "Display Data" workflow action (which we're setting up next).
Step 4: Build the workflow to pass data
Now we connect the repeating group to the popup. This is done in two workflow steps on the Download button inside the repeating group cell. This is the critical step that connects the clicked cell to the popup. The workflow will be triggered when the user clicks the "Download" button inside a Repeating Group cell.
On the "Download" Button in the Repeating Group
When Download button is clicked. Click the Download button → Start/Edit Workflow
Workflow Step 1: Display data in an element
- Element: Choose your popup (e.g.,
PopupDownload). - Data to display: Select
Current cell's Resource(orCurrent cell's [Your Data Type]). This immediately sends the specific resource record from the clicked cell into the popup.
This tells Bubble: "Take the Resource from the cell the user clicked and send it to the popup."
Workflow Step 2: Show element
- Element: Choose your popup (e.g.,
PopupDownload).
This opens the popup after you've loaded the data into it.
Why the order matters: You must pass the data (Step 1) before showing the popup (Step 2). If you reverse these, the popup will appear but won't have any data loaded, causing all your dynamic fields to be empty. By using "Display data" before "Show popup", you ensure the popup is loaded with the correct resource details before the user sees it.
Visual workflow summary
User clicks "Download" on Resource Cell
↓
[Step 1] Display Data → Popup Download ← Current cell's Resource
↓
[Step 2] Show Popup Download
↓
Popup opens with the correct Resource loaded
Next, we will reference the Passed Data Inside the Popup Form.
Step 5: Reference the Passed Data Inside the Popup Form
Now that the popup holds the specific Resource record, you can reference its properties anywhere inside the popup using Parent group's Resource (or PopupDownload's Resource).
-
User Inputs: Create the necessary inputs for the user (e.g., Name, Email, Role).
-
Hidden Fields (Optional but Recommended): Use Input elements with the "Content format" set to Text and the "This input is initial content" checkbox ticked. Then, set their initial content to hold critical resource data:
- Input-Resource-Name: Initial content =
Parent group's Resource's Name - Input-Resource-File-URL: Initial content =
Parent group's Resource's FileURL(This is the URL you'll use for the actual download).
- Input-Resource-Name: Initial content =
Step 6: Build the download submission workflow
Now we handle what happens when the user fills out the form and clicks "Download Now" inside the popup.
On the "Download Now" Button in the popup
This workflow runs when the user submits the form inside the popup (e.g., clicks a button labeled "Download Now").
Start Workflow: When Download Now button is clicked.
Workflow Step 1: Create a new thing (optional but recommended)
This logs the download for analytics and lead tracking.
-
Action: Data → Create a new thing
-
Type:
DownloadLog(a new data type you create to track submissions). -
Set fields:
- UserEmail = Input Email's value
- UserName = Input Name's value
- UserRole = Input Role's value
- Resource = Parent group's Resource
- DownloadDate = Current date/time
- IPAddress = (if you want to track this, use a plugin)
Why log this? You now have a database of who downloaded what, when. This is gold for:
- Email marketing (send related resources)
- Lead scoring (track engagement)
- Analytics (which resources are most popular)
Workflow Step 2: Open an external website
This triggers the download.
- Destination:
Parent group's Resource's File(if using Bubble file storage) - OR Destination:
Parent group's Resource's FileURL(if using external storage) - Open in: New tab (check this box)
When you use a file URL in "Open an external website," the browser automatically initiates a download.
Workflow Step 3: Reset inputs (optional cleanup)
- Input Email → Reset
- Input Name → Reset
- Input Role → Reset
This clears the form for the next use.
Workflow Step 4: Hide element
- Action: Element Actions → Hide
- Element: Choose your popup (e.g.,
PopupDownload).
This closes the popup after the download starts.
Complete download workflow summary
User clicks "Download Now" in Popup
↓
[Step 1] Create DownloadLog entry
↓
[Step 2] Open file URL (triggers download)
↓
[Step 3] Reset form inputs
↓
[Step 4] Hide popup
Step 7: Advanced enhancements
Once the basic system works, consider these improvements:
1. Add download restrictions
Prevent users from downloading the same resource multiple times without permission.
Add a condition to the Download button in the repeating group:
-
Only show when: Do a search for DownloadLogs:filtered
- Constraint: UserEmail = Current User's email
- Constraint: Resource = Current cell's Resource
- :count = 0
This hides the download button if they've already downloaded this resource.
2. Email validation
Use Bubble's email validation or a third-party plugin to verify emails before allowing downloads.
Add a workflow step before creating DownloadLog:
- Only when: Input Email:email is valid is "yes"
3. Automated Thank You Email
Integrate with SendGrid, Mailgun, or Bubble's email plugin to send a confirmation email with the download link.
Add after creating DownloadLog:
- Send email
- To: Input Email's value
- Subject: "Your [Parent group's Resource's Name] is ready!"
- Body: Include download link and related resources
4. Analytics dashboard
Create an admin page that shows:
- Most downloaded resources
- Download trends over time
- Lead capture rate
- Email list growth
Use the DownloadLog data type to power repeating groups and charts.
5. Dynamic button text
Change the button text based on whether the user has already downloaded:
Button text (dynamic):
-
When: Current User's email is in DownloadLogs for Current cell's Resource
- Text: "Download Again"
-
Default:
- Text: "Download Now"
6. File preview option
Add a "Preview" button that shows the first page or a sample without requiring form submission.
Implementation:
- Add a PreviewURL field to Resource
- Add a "Preview" button next to "Download"
- Workflow: Open PreviewURL in new tab (no popup needed)
Common mistakes and how to fix them
Mistake 1: Popup has no type of content
Symptom: All dynamic fields in the popup are empty or show "Field is empty"
Fix:
- Select the popup element
- In the property editor, set Type of content to Resource
- All parent group references will now work
Mistake 2: Forgot "Display Data" step
Symptom: Popup opens but shows the wrong resource or a random resource
Fix:
- Edit the Download button workflow
- Make sure "Display data in element" comes BEFORE "Show element"
- Data to display should be
Current cell's Resource
Mistake 3: Using "This Popup's Resource" instead of "Parent Group's Resource"
Symptom: Data doesn't appear in popup elements
Fix:
- Click each dynamic element in the popup
- Change the data source from "This popup's Resource" to "Parent group's Resource"
- They're equivalent but "Parent group" is more explicit
Mistake 4: Wrong file field
Symptom: Download button doesn't work or downloads wrong file
Fix:
-
Verify you're using the correct field:
- Bubble storage:
Parent group's Resource's File - External:
Parent group's Resource's FileURL
- Bubble storage:
-
Check that the field actually contains data in your database
Mistake 5: Popup data source is hardcoded
Symptom: Popup always shows the same resource regardless of which button was clicked
Fix:
- Select the popup
- Check if Data source has a value (like "First item" or a specific Resource)
- Clear the data source field (it should be empty)
- Data will now be passed dynamically via workflow
Quick reference: Complete workflow summary
Repeating Group → Popup (On Download Button)
Step 1: Display data
→ Element: Popup Download
→ Data: Current cell's Resource
Step 2: Show
→ Element: Popup Download
Popup → Download (On Download Now Button)
Step 1: Create a new thing
→ Type: DownloadLog
→ UserEmail: Input Email's value
→ UserName: Input Name's value
→ Resource: Parent group's Resource
→ DownloadDate: Current date/time
Step 2: Open an external website
→ Destination: Parent group's Resource's File (or FileURL)
→ Open in new tab: Yes
Step 3: Reset inputs
→ Input Email
→ Input Name
→ Input Role
Step 4: Hide
→ Element: Popup Download
Summary
This tutorial showed you how to correctly pass the details of an item from a Repeating Group cell (e.g., a "Resource") to a Popup. This ensures that when a user fills out a form inside the popup, the submitted data (like their email) and the subsequent action (like a file download) are correctly tied to the specific resource they clicked.
Have questions about implementing this in your specific use case? I regularly help people troubleshoot their Bubble builds and love seeing how you adapt this system to your unique needs.
Found this helpful? Share it with other Bubble builders who are struggling with repeating group and popup interactions. This pattern solves one of the most common pain points in no-code development.
ABOUT ME
I'm Juliet Edjere, a no-code professional focused on automation, product development, and building scalable solutions with no coding knowledge.
Learn from practical examples and explore the possibilities of no-code, AI and automation. We'll navigate the tools, platforms, and strategies, one article at a time!
Visit my website → built with Carrd