Is there anyway to get Monday.com data to Snowflake using Matillion?

Monday.com uses GraphQL API and could not test it in Postman. Is there any other way to connect to Monday.com using Matillion?

@NeelamMacwan​ Were you able to create an API profile for Monday.com? I'm running into a similar issue where it's able to connect and get a response, but the Monday.com API isn't accepting the body of the request (which works fine in PostMan). Here's what I'm doing in PostMan to get a valid response:

But in Matillion’s API Profiler I get:

when using the following Body:

Hi @thdata​ ,

Yeah, I was able to create the API profile in Matillion. As Monday.com API is GraphQL, you should send only POST request, I think the error could be because of GET request call. Can you try with POST first and we can work on next error if there is any.

Hi @TrentHaun (Customer)​,

Yeah, the body text looks like below:

{"query":"{ boards(ids: (board id)) { items { name, updated_at, group { title }, columns: column_values {id, title, text } } } }"}

Regards,

Neelam

Also,

I have selected 'Bearer Token' in Authorisation tab and the Params looks like below:

That did the trick, thanks @NeelamMacwan​! It wasn't attaching the content-type parameter automatically, adding it back in fixed the issue (along with using POST method). For any future Monday.com users: the formatting of the Body statement requires the extra quotations to be passed correctly (can't just copy/paste your GraphQL queries directly). I was able to get my query to execute correctly using the key/value pair method of Authorization using the 'Authorization' key.

Great, you got your APU working in Matillion. Just to add, the addition of extra quotation was because the body statement should be in JSON.

 

Regards,

Neelam

Hi @NeelamMacwan​ ,

I can't get the API profile to work in Matillion for Monday.com. Would you mind helping me set up the Monday.com API profile? I would really appreciate it.

Ben Palacios

I got it to work. This is the rsd file generated:

 

<api:script xmlns:api="http://apiscript.com/ns?v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">

 

 <!-- See Column Definitions to specify column behavior and use XPaths to extract column values from JSON. -->

 <api:info title="VOC_2022" desc="Generated schema file." xmlns:other="http://apiscript.com/ns?v1">

  <!-- You can modify the name, type, and column size here. -->

  <attr name="item_id"   xs:type="string" readonly="false"       other:xPath="/json/data/boards/items/id"  />

  <attr name="column_ids" xs:type="string" readonly="false"       other:xPath="/json/data/boards/items/column_values/id"  />

  <attr name="column_values" xs:type="string" readonly="false"       other:xPath="/json/data/boards/items/column_values/value" />

 </api:info>

 

 <api:set attr="DataModel" value="DOCUMENT" />

 <api:set attr="uri" value="https://api.monday.com/v2" />

 <api:set attr="JSONPath" value="/data/boards/items" />

 

 <!-- The GET method corresponds to SELECT. Here you can override the default processing of the SELECT statement. The results of processing are pushed to the schema's output. See SELECT Execution for more information. -->

 <api:script method="GET">

  <api:set attr="method" value="POST"/> <!-- HTTP request type -->

  <api:set attr="data">

{"query":"{ boards(ids:board_id){ name, items { id column_values { id value } } } }"}

  </api:set>

  <api:set attr="ContentType" value="application/json" />

  <api:call op="jsonproviderGet">

   <api:push/>

  </api:call>

 </api:script>

 

</api:script>

 

 

However, it's only returning 100 items; I'm trying to figure out pagination and the limit parameter. I added the limit parameter (limit:1000), but it didn't work, it runs, but it only returns 100 items.

 

 

Hi Ben,

Glad it works for you.

 

Could you show me pagination if you figure it out. I know what to select but not sure if pagination works for me.

 

Also, check the API Component, the limit might be set to 100, allowing only 100 records to be downloaded.

Thanks,

Neelam

Hi Neelam,

I didn't get pagination to work; but the limit attribute in the component worked. thanks!

 

Neelam,

What did you set as the repeating element?

 

Hi Ben,

 

I had created two API calls, one with repeating element as board and other one with repeating element as columns, then I had done a left join I guess.

 

Thanks,

Neelam

Thanks @NeelamMacwan (Customer)​! When attempting the POST call, I get the following:

Which generated the following 500 status error:

Did you do anything special with formatting your Body text? Or add any additional headers/parameters to get it to work?