# End-user uploads a spreadsheet that is then 'parsed' and entered into a Glide (or Progress) table

**URL:** <https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588>\
**Category:** Ask for Help\
**Created:** [March 11, 2024, 2:59pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588 "2024-03-11T14:59:54Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![MattLB](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mattlb/32/41284_2.png) [@MattLB](https://community.glideapps.com/u/MattLB)\
**Post date:** [March 11, 2024, 2:59pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/1 "2024-03-11T14:59:54Z")

</div>

I have seen this from @Simon_Hill : [Allow users to Import Spreadsheet into Glide Table via 'Import data' action](https://community.glideapps.com/t/allow-users-to-import-spreadsheet-into-glide-table-via-import-data-action/66131)

Is their a template or has someone done this before (have a user upload a CSV/Excel spreadsheet and then process it and enter the results into a Glide table ). In my case it is 5-7 columns of text data that will be ‘imported’.

And of course cover the case to only allow 500 rows max to be imported/processed so @Robert_Petitto scenario never comes to pass.

Thanks

Matt

---

<div class="post-metadata">

**Author:** ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)\
**Post date:** [March 11, 2024, 3:37pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/2 "2024-03-11T15:37:17Z")

</div>

> [@Data Import](https://community.glideapps.com/t/data-import/71086/2):
>
> Here’s a concept video from a while ago by @Darren_Murphy . Link: [Loom | Free Screen & Video Recording Software | Loom](https://www.loom.com/share/aa950af4901b4b3b8b9ccdda8aa591e0?sid=adf47a94-67a6-49c5-9133-bbac17f52937)

---

<div class="post-metadata">

**Author:** ![MattLB](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mattlb/32/41284_2.png) [@MattLB](https://community.glideapps.com/u/MattLB)\
**Post date:** [March 11, 2024, 3:58pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/3 "2024-03-11T15:58:20Z")

</div>

Exactly what I was looking for except I don’t know much about Javascript and Mutations 🙂

I am just a nearly-no-code Glide guy 😂

Matt

---

<div class="post-metadata">

**Author:** ![MattLB](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mattlb/32/41284_2.png) [@MattLB](https://community.glideapps.com/u/MattLB)\
**Post date:** [March 11, 2024, 5:01pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/4 "2024-03-11T17:01:02Z")

</div>

Of course it is by @Darren_Murphy

I already consider him (and you) as part of the development team!

Have a great week!

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [March 11, 2024, 5:12pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/5 "2024-03-11T17:12:19Z")

</div>

Hey!  
I’m just a guy…

---

<div class="post-metadata">

**Author:** ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)\
**Post date:** [March 11, 2024, 5:24pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/6 "2024-03-11T17:24:55Z")

</div>

Yeah, it’s a bit of setup, and pretty slick, but I don’t know of a better way. There needs to be some sort of action to cause multiple rows to be added. The only alternative is that users pass the file to you and then you manually upload it through the builder, which I’m sure you don’t want to do.

---

<div class="post-metadata">

**Author:** ![MattLB](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mattlb/32/41284_2.png) [@MattLB](https://community.glideapps.com/u/MattLB)\
**Post date:** [March 11, 2024, 5:33pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/7 "2024-03-11T17:33:40Z")

</div>

> [@Jeff\_Hager](#):
>
> which I’m sure you don’t want to do

which is exactly the way I am doing it today!

These have typically been larger sets of data that were in a google sheet. I had to clean up the data and then ‘paste’ it into the existing sheet. It was ‘cheaper’ to do this (from a Glide update perspective) and it was more of a one-time setup process to boot.

Now I need end-users to upload smaller lists of items (under 150 items) and they can be doing this all the time and she see result immediately (versus waiting 1-2 business days for import/processing). So I think this methodology fits the bill to start.

In the future I will need to do some straightforward pre-processing before entering them into the Glide table where Glide relations/queries do there magic.

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [March 12, 2024, 12:32am UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/8 "2024-03-12T00:32:38Z")

</div>

What plan do you have this app on? It can either be a call API action, or a Make scenario depends on what plan you have.

---

<div class="post-metadata">

**Author:** ![MattLB](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mattlb/32/41284_2.png) [@MattLB](https://community.glideapps.com/u/MattLB)\
**Post date:** [March 12, 2024, 1:28am UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/9 "2024-03-12T01:28:32Z")

</div>

Business today - Enterprise when it goes live.

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [March 12, 2024, 2:15am UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/10 "2024-03-12T02:15:38Z")

</div>

I would still vouch for a Make scenario. Basically what you do over there is:

- A HTTP module to download the file.
- A CSV module to parse the CSV.
- An array aggregator to aggregate based on the structure of the JSON module that comes just after. The JSON structure should follow Glide’s standard.
- A HTTP module to batch call the API.

 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/d/5/d5f25a3c8d6ce68a3cee6a6dd2eb29c0d673a657.png)

You don’t need the 3rd and 4th module above.

---

<div class="post-metadata">

**Author:** ![MattLB](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mattlb/32/41284_2.png) [@MattLB](https://community.glideapps.com/u/MattLB)\
**Post date:** [March 12, 2024, 5:54pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/11 "2024-03-12T17:54:34Z")

</div>

Thanks Thinh. This looks like an excellent methodology.

---

<div class="post-metadata">

**Author:** ![NFNHello](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/nfnhello/32/3371_2.png) [@NFNHello](https://community.glideapps.com/u/NFNHello)\
**Post date:** [June 9, 2024, 3:40pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/12 "2024-06-09T15:40:03Z")

</div>

I recently made something similar in Zapier as a proof of concept. The webhook from Glide includes the Glide file URL. I didn’t add the aggregation yet, but sharing now before I forget incase it helps someone in the future.

 ![North for Now 2024-06-09 at 10.19.05@2x](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/e/a/ea47ddf7a38ce1bc95288f1ca3d03f960d485c89.png)

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [June 9, 2024, 11:30pm UTC](https://community.glideapps.com/t/end-user-uploads-a-spreadsheet-that-is-then-parsed-and-entered-into-a-glide-or-progress-table/71588/13 "2024-06-09T23:30:42Z")

</div>

Thanks for sharing! I always wonder how these things are handled in Zapier.
