Uploading Etsy images with Alt Text (Separating values from Iterator)

I’ve built a scenario that creates Etsy listings, and after many days of banging my head into my desk as a total Make n00b, I’ve finally gotten it to work. I have one issue to resolve that pertains to the “Upload Listing Image” Etsy node, where I use Iterator > HTTP Get a File > Etsy Upload Listing Image to upload all of the images I have for a single listing. My problem is that although the Iterator allows me upload all my files at once, I’m unable to add anything to the “Alt Text” field because I can only pass URLs into the “Get File” module before the “Upload Listing Image” module. I’ve tried using two sequential Iterators for the different data types, but the Etsy module throws an error because it thinks I’m attempting to upload more that 10 images. Is there a way I can pass both the image urls and alt text separately to one module?

Where are you sourcing the alternative text from? Have you set a previous Set Variable module to parse JSON string (no spaces)? You can source content prior to iterator, doesn’t have to be the directly previous module. You can also manually type the alt-text (which I’m guessing you want to be dynamic?)

I have already built what you’re attempting - I get over 1200 listings per day uploaded - it’s more advanced than what you’re showing because I can add variations, materials, images everything) :smiley:

Keep going, the more practice, the better you’ll get.

@PixieNom 1200 listings a day?! You legend!!! :exploding_head: :clap:

I’ll have to reach out to you directly to pick your brain on that process if you’re open about it, because my mind is absolutely blown by that output. For now, we’ll address the issue I currently have. Here’s the general overview: I’m attempting to sell downloadable digital prints (like millions of other people in the Etsyverse :melting_face:), and I use Airtable to manage all of my design assets and my workflow. Here’s the breakdown step-by-step:

  1. Create the listing with a webhook via a button in Airtable
  2. Upload listing images to the listing, which is where I have my issue with the Alt Text. I’ve never used variables in Make yet (yup, total n00b), and I’m all ears about how you would implement your suggestion here :pray:
  3. Upload video to the listing
  4. Upload listing downloads based on the product type
  5. Set the listing to active, then copy the listing URL to Airtable

The alt text I wish to use is dynamic, as it differs between the product type and the mockups I use. Again, I generate this text with a combination of automation and slight manual edits within Airtable for the final alt text I wish to push to the listing.

This is a bit of an overshare considering my issue is with step #2, but I felt it relevant to show the process to 1) gain any expert critiques you have to offer, and 2) give back to anyone else in the community who’s torn their hair out as much as I have trying to accomplish this kind of automation.

From what you’ve described, the alt text for each image is already available on Airtable, and you’ve already fetched the alt text along with the image URL (in the first or second Airtable module)?

What array variable are you iterating in your Iterator module in group 2? Is it the images array from group 1’s Array Aggregator?

If you need further assistance, please provide the following:

1. Scenario blueprint

Please export the scenario blueprint file to allow others to view the mappings and settings. At the bottom of the scenario editor, you can click on the three dots to find the Export Blueprint menu item.


(Note: Exporting your scenario will not include private information or keys to your connections)

Uploading it here will look like this:

blueprint.json (12.3 KB)

2. And most importantly, Input/Output bundles

Please provide the input and output bundles of the iterator/aggregator modules by running the scenario (or get from the scenario History tab), then click the white speech bubble on the top-right of each module and select “Download input/output bundles”.

A.

Save each bundle contents in your text editor as a bundle.txt file, and upload it here into this discussion thread.

Uploading them here will look like this:

module-1-output-bundle.txt (12.3 KB)

B.

If you are unable to upload files on this forum, alternatively you can paste the formatted bundles in this manner:

  • Either add three backticks ``` before and after the code, like this:

    ```
    input/output bundle content goes here
    ```

  • Or use the format code button in the editor:

Providing the input/output bundles will allow others to replicate what is going on in the scenario even if they do not use the external service.

Following these steps will allow others to assist you here. Thanks!

samliewrequest private consultation

Join the Make Fans Discord server to chat with other makers!

1 Like

Hi @samliew , thank you for responding and sorry for the delay in my response. It was a busy holiday weekend. I’ll go ahead and answer your questions in order:

  1. Confirmed, the alt text is already available for each image within Airtable via the second module in the workflow. Upon revision, I removed the Array Aggregator module as it was redundant to the workflow (I’m still new when it comes to these things, and the workflow works fine without the Array Aggregator). The workflow is the same as the image I included in the previous post, minus the array aggregator.

  2. The variables in the first Iterator module are sourced from the image URL variables from Airtable. The only way I’ve found them to work with the Etsy upload image module is via the HTTP download image module. This works fine for uploading the images to Etsy, but it’s also the point where I’m stuck with the alt text. As I mentioned earlier, I attempted to use two iterators (one for images and one for Alt Text), but the Etsy module sees this as attempting to upload more than the 10 image limit and throws an error.

Here’s the blueprint:
EtsyListingBlueprint.json (235.6 KB)

Here’s the Iterator Input Bundle:
IteratorInputBundle.txt (3.7 KB)

Here’s the Iterator Output Bundle:
IteratorOutputBundle.txt (4.0 KB)

After your Airtable module,

1. Create an Array

Module Export

You can copy and paste this module export into your scenario. This will paste the modules shown in my screenshots above.

  1. Copy the JSON code below by clicking the copy button when you mouseover the top-right of the code block
    Screenshot_2024-01-17_200117

  2. Enter your scenario editor. Press ESC to close any dialogs. Press CTRLV (paste keyboard shortcut for Windows) to paste directly in the canvas.

  3. Click on each imported module and save it for validation. You may be prompted to remap some variables and connections.

Click to Expand Module Export Code

JSON - Copy and Paste this directly in the scenario editor

{
    "subflows": [
        {
            "flow": [
                {
                    "id": 110,
                    "module": "util:SetVariables",
                    "version": 1,
                    "parameters": {},
                    "mapper": {
                        "variables": [
                            {
                                "name": "AltText",
                                "value": "{{add(emptyarray; 2.`Info Card #3 Alt Text`; 2.`Info Card #2 Alt Text`; 2.`Info Card #1 Alt Text`; 2.`Mockup #7 Alt Text`; 2.`Mockup #6 Alt Text`; 2.`Mockup #5 Alt Text`; 2.`Mockup #4 Alt Text`; 2.`Mockup #3 Alt Text`; 2.`Mockup #2 Alt Text`; 2.`Mockup #1 Alt Text`)}}"
                            }
                        ],
                        "scope": "roundtrip"
                    },
                    "metadata": {
                        "designer": {
                            "x": 318,
                            "y": 601,
                            "name": "Alt Text Array"
                        },
                        "restore": {
                            "expect": {
                                "variables": {
                                    "items": [
                                        null
                                    ]
                                },
                                "scope": {
                                    "label": "One cycle"
                                }
                            }
                        },
                        "expect": [
                            {
                                "name": "variables",
                                "type": "array",
                                "label": "Variables",
                                "spec": [
                                    {
                                        "name": "name",
                                        "label": "Variable name",
                                        "type": "text",
                                        "required": true
                                    },
                                    {
                                        "name": "value",
                                        "label": "Variable value",
                                        "type": "any"
                                    }
                                ]
                            },
                            {
                                "name": "scope",
                                "type": "select",
                                "label": "Variable lifetime",
                                "required": true,
                                "validate": {
                                    "enum": [
                                        "roundtrip",
                                        "execution"
                                    ]
                                }
                            }
                        ],
                        "interface": [
                            {
                                "name": "AltText",
                                "label": "AltText",
                                "type": "any"
                            }
                        ]
                    }
                }
            ]
        }
    ],
    "metadata": {
        "version": 1
    }
}

2. Get array position using Iterator’s index variable

samliewrequest private consultation

Join the Make Fans Discord server to chat with other makers!

2 Likes

Works like a charm!! Thank you so much @samliew :pray:

1 Like

No problem, glad I could help!

1. If anyone has a new question in the future, please start a new thread. This makes it easier for others with the same problem to search for the answers to specific questions, and you are more likely to receive help since newer questions are monitored closely.

2. The Make Community guidelines encourages users to try to mark helpful replies as solutions to help keep the Community organized.

This marks the topic as solved, so that:

  • others can save time when catching up with the latest activity here, and
  • allows others to quickly jump to the solution if they come across the same problem

To do this, simply click the checkbox at the bottom of the post that answers your question:
Screenshot_2023-10-04_161049

3. Don’t forget to like and bookmark this topic so you can get back to it easily in future!

4. Do join the unofficial Make Discord server for live chat and video assistance

samliewrequest private consultation

Join the unofficial Make Discord server to chat with other makers!

1 Like