web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

News and Announcements icon
Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Automate / Excel to sharepoint au...
Power Automate
Answered

Excel to sharepoint automation 10k rows - excel is the master source

(0) ShareShare
ReportReport
Posted on by

Hi all, 

i have an excel sheet that is my master data source but i need to hold the data in sharepoint lists ( for use with powerapps ) the idea is to have a flow that checks the excel daily and adds any new items or updates any changes . 

ive used Rezas tutorial to do this successfully however i have hit the row limit of 5000 but we have at least 8k rows at the moment. 

 

any ideas ? i have found a few pages using a ton of variables but have struggled to get them working. i did think about using the orderby feature and top count then have 2 seperate flows one to take the first 5000 desc and the other asc but again not 100% how to make this work. 

 

tutorial : https://www.youtube.com/watch?v=uEZI_b1Gs-k&lc=Ugz9xMECsiT86ZaeodJ4AaABAg.9qxFz5TeH_b9qxH4f3KqHr

 

any help appreciated.

Categories:
I have the same question (0)
  • wskinnermctc Profile Picture
    6,519 Moderator on at

    Don't use Excel as a database. Make the SharePoint list your primary source.

     

    At the least, use a scheduled Dataverse Dataflow to get data from the Excel table and put into a Dataverse table. Then run a flow off the Dataverse table to SharePoint, or just use the Dataverse table directly with the PowerApp. A Dataverse Dataflow can look for new rows or changes much easier than a Power Automate Flow.

  • hstep Profile Picture
    on at

    If it was my data I would, but it is somebody else’s data and they will only use excel. Essentially I need a copy of it and I want it in SharePoint so I don’t have these limitations as it’s really key data

  • wskinnermctc Profile Picture
    6,519 Moderator on at

    That's annoying. Sounds like they need to change, as it's really key data.

     

    Regrettably, I have to use Excel as a source due to an export from another system. (Security blocks any connections.)

    Initially, I had a process that basically wiped my entire SharePoint list and then replaced it with the Excel data. It worked, but only because it was straight data. Nothing was getting edited in the SharePoint list after upload. 

    Eventually I changed the process, and now I use Dataverse Flows in Teams. The Dataflow goes into these Excel workbooks and gets the data and puts it into Dataverse tables. Then I use Power Automate flows to put data into SharePoint lists.

     

    If you need to routinely check a lot of data, try using Teams Dataverse Dataflow. You will see how easy it is to get the data into Dataverse tables. It will make working with Power Automate 10x easier. You would basically have a trigger that says "When an item is created or modified in Dataverse", so when the Dataflow runs, it will trigger the Power Automate flow.

     

    Another clunky method is to replace the dataverse option with an intermediate Excel workbook.

    Make an Excel workbook with a Power Query that pulls in data from the source Excel as well as the SharePoint list, then use the power query to compare data and output to a small table. Then run a flow on that small table. This will be manual because you have to manually click refresh to run the power query and then manually trigger the flow. Not nice, but gets the job done.

  • wskinnermctc Profile Picture
    6,519 Moderator on at

    You could also try the Batch Update.

     

    I've used it for large data sets and it works. Seems complicated at first, but once you put it together and test it, you will be able to set it up for what you want.

     

    https://powerusers.microsoft.com/t5/Power-Automate-Cookbook/Batch-Update-SharePoint-List/td-p/1365410 

  • Verified answer
    hstep Profile Picture
    on at

    i struggled with all of the above - i did solve this in a way - i set up 2 automations and used the sort function to take the first 5000 then on the other flow i took the last 5000 which allows me up to 10000 records - i only need 8k so this has worked for me

  • hstep Profile Picture
    on at

    Hey, do you know anywhere there is a better guide for this - i didnt find this particular video easy enough to follow. i have looked online but struggling to find anything

  • wskinnermctc Profile Picture
    6,519 Moderator on at

    Did you copy and paste in the code to make the flow?

     

    I think the guide is intended to be used after using the copy and paste and the flow is made. Then follow the guide to adjust any settings within the flow. 

     

    If you go to the link, scroll down to the reply from @takolota that is made on 06-06-2022 4:14PM and copy all of that code in the reply. Then in your flow go to "My clipboard" and press Ctrl+V to paste the code into your flow which will create all of the actions. 

     

    Then follow the video steps.

     

    https://powerusers.microsoft.com/t5/Power-Automate-Cookbook/Batch-Update-SharePoint-List/td-p/1365410 

    wskinnermctc_0-1687787148913.png

     

    Here is the code from the linked page to copy and paste:

    {"id":"e92739c5-307f-46dc-aad9-a7bc687fa96f","brandColor":"#8C3900","connectionReferences":{"shared_excelonlinebusiness_1":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness/connections/512f9c45ec1947d386e56055c70ac7e2"}},"shared_sharepointonline_2":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/f2c62e9ce2fc415c8103a6205da5f9d3"}}},"connectorDisplayName":"Control","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"Batch_update_from_external_data","operationDefinition":{"type":"Scope","actions":{"Do_until_Update":{"type":"Until","expression":"@less(length(body('List_rows_present_in_a_table')?['value']), 99990)","limit":{"count":150,"timeout":"PT8H"},"actions":{"Scope_Batch_update_items_in_1st_100k_SP_records":{"type":"Scope","actions":{"Do_until":{"type":"Until","expression":"@less(length(body('Select')), sub(outputs('settings')['batchSize'], 5))","limit":{"count":150,"timeout":"PT7H"},"actions":{"Select":{"type":"Select","inputs":{"from":"@take(skip(body('Filter_array_Remove_items_without_a_key_to_ID_match_in_SharePoint'), mul(outputs('settings')['batchSize'], iterationIndexes('Do_until'))), outputs('settings')['batchSize'])","select":"@replace(replace(outputs('batchTemplate'),'|ID|', string(item()?['ID'])), '|RowData|', string(item()))"},"runAfter":{},"metadata":{"operationMetadataId":"d90bce05-ae93-482c-a536-bd36310988b6"}},"batchData":{"type":"Compose","inputs":"@join(body('Select'), decodeUriComponent('%0A'))","runAfter":{"Select":["Succeeded"]},"metadata":{"operationMetadataId":"37cd3c50-9877-4ec3-a32f-33290e7cf6cb"}},"SendBatch":{"type":"ApiConnection","inputs":{"host":{"connection":{"name":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$connections']['shared_sharepointonline_2']['connectionId']"}},"method":"post","body":{"method":"POST","uri":"/_api/$batch","headers":{"X-RequestDigest":"digest","Content-Type":"multipart/mixed;boundary=batch_@{actions('settings')?['trackedProperties']['batchGUID']}"},"body":"--batch_@{actions('settings')?['trackedProperties']['batchGUID']}\nContent-Type: multipart/mixed; boundary=\"changeset_@{actions('settings')?['trackedProperties']['changeSetGUID']}\"\nContent-Length: @{length(outputs('batchData'))}\nContent-Transfer-Encoding: binary\n\n@{outputs('batchData')}\n--changeset_@{actions('settings')?['trackedProperties']['changeSetGUID']}--\n\n--batch_@{actions('settings')?['trackedProperties']['batchGUID']}--"},"path":"/datasets/@{encodeURIComponent(encodeURIComponent(outputs('settings')['siteAddress']))}/httprequest","authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"batchData":["Succeeded"]},"limit":{"timeout":"P1D"},"metadata":{"flowSystemMetadata":{"swaggerOperationId":"HttpRequest"},"operationMetadataId":"16e4dda3-3bad-46d0-a0ce-a919bada5f25"}},"Results":{"type":"Compose","inputs":"@base64ToString(body('sendBatch')['$content'])","runAfter":{"SendBatch":["Succeeded"]},"metadata":{"operationMetadataId":"fa9b68d1-10d2-4ca3-8a3a-05c3c14c2f54"}}},"runAfter":{"Filter_array_Remove_items_without_a_key_to_ID_match_in_SharePoint":["Succeeded"]},"metadata":{"operationMetadataId":"c2b0cb55-964e-4bd4-8484-fcf245bd3932"}},"Filter_array_Remove_items_without_a_key_to_ID_match_in_SharePoint":{"type":"Query","inputs":{"from":"@body('GenerateSPData')","where":"@not(equals(item()?['ID'], null))"},"runAfter":{"GenerateSPData":["Succeeded"]},"metadata":{"operationMetadataId":"1c5c3129-35c5-444d-9a4f-aad8f88a4446"}},"GenerateSPData":{"type":"Select","inputs":{"from":"@body('List_rows_present_in_a_table')?['value']","select":{"__metadata":"@json(concat('{\"type\":\"SP.Data.', if(empty(outputs('settings')['ListWebAddressName']), replace(replace(outputs('settings')['listName'], '_', '_x005f_'), ' ', '_x0020_'), replace(replace(outputs('settings')['ListWebAddressName'], '_', '_x005f_'), ' ', '_x0020_')), 'ListItem\"}'))","ID":"@outputs('Compose_Reformat_keys_to_single_JSON_object')?[concat(item()[outputs('settings')['NewDatasourceKeyColumnName']], if(empty(outputs('settings')['NewDatasourceKeyColumnName2']), '', item()[outputs('settings')['NewDatasourceKeyColumnName2']]))]?['ID']","Date":"@addDays('1899-12-30', int(item()['Date']), 'u')","Title":"@item()?['Name']","Email":"@item()?['Email']","Status":"@item()?['Status']"}},"runAfter":{"Compose_Reformat_keys_to_single_JSON_object":["Succeeded"]},"description":"In the ID row expression, replace item()?['Email'] with the column(s) in the updated data that make up the keys. Ex: replace it with concat(item()?['ExcelColumnName1'], item()?['ExcelColumnName2']) for a multi-column key.","metadata":{"operationMetadataId":"ce0487d5-63c8-40b4-9b4c-5229c0439c94"}},"Compose_Reformat_keys_to_single_JSON_object":{"type":"Compose","inputs":"@json(replace(replace(replace(string(body('Select_Keys_from_Get_items_1')), '[{', '{'), '}]', '}'), '},{', ','))","runAfter":{"Select_Keys_from_Get_items_1":["Succeeded"]},"metadata":{"operationMetadataId":"69b1d189-d56f-45fc-8dbb-a49740832a64"}},"Select_Keys_from_Get_items_1":{"type":"Select","inputs":{"from":"@outputs('Get_items_1st_100000')?['body/value']","select":{"@{concat(item()[outputs('settings')['SharePointKeyColumnName']], if(empty(outputs('settings')['SharePointKeyColumnName2']), '', item()[outputs('settings')['SharePointKeyColumnName2']]))}":"@item()"}},"runAfter":{},"description":"Action limit is 100k Get items records. Decide on 1+ columns to use on the left side as a unique key that is different for every record in the list. For a multiple column key list each, eg: item()?['Column1'], item()?['Column2'], item()?['Column3']).","metadata":{"operationMetadataId":"dac3de39-a3e5-422a-be37-81089ee64a51"}}},"runAfter":{"batchTemplate":["Succeeded"]},"metadata":{"operationMetadataId":"a32ffaf9-e457-4b81-92cf-531cf58ce133"}},"Scope_Batch_update_items_in_2nd_100k_SP_records":{"type":"Scope","actions":{"Do_until_2":{"type":"Until","expression":"@less(length(body('Select_2')), sub(outputs('settings')['batchSize'], 5))","limit":{"count":150,"timeout":"PT7H"},"actions":{"Select_2":{"type":"Select","inputs":{"from":"@take(skip(body('Filter_array_Remove_items_without_a_key_to_ID_match_in_SharePoint_2'), mul(outputs('settings')['batchSize'], iterationIndexes('Do_until_2'))), outputs('settings')['batchSize'])","select":"@replace(replace(outputs('batchTemplate'), '|ID|', string(item()?['ID'])), '|RowData|', string(item()))"},"runAfter":{},"metadata":{"operationMetadataId":"d90bce05-ae93-482c-a536-bd36310988b6"}},"batchData_2":{"type":"Compose","inputs":"@join(body('Select_2'), decodeUriComponent('%0A'))","runAfter":{"Select_2":["Succeeded"]},"metadata":{"operationMetadataId":"37cd3c50-9877-4ec3-a32f-33290e7cf6cb"}},"SendBatch_2":{"type":"ApiConnection","inputs":{"host":{"connection":{"name":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$connections']['shared_sharepointonline_2']['connectionId']"}},"method":"post","body":{"method":"POST","uri":"/_api/$batch","headers":{"X-RequestDigest":"digest","Content-Type":"multipart/mixed;boundary=batch_@{actions('settings')?['trackedProperties']['batchGUID']}"},"body":"--batch_@{actions('settings')?['trackedProperties']['batchGUID']}\nContent-Type: multipart/mixed; boundary=\"changeset_@{actions('settings')?['trackedProperties']['changeSetGUID']}\"\nContent-Length: @{length(outputs('batchData_2'))}\nContent-Transfer-Encoding: binary\n\n@{outputs('batchData_2')}\n--changeset_@{actions('settings')?['trackedProperties']['changeSetGUID']}--\n\n--batch_@{actions('settings')?['trackedProperties']['batchGUID']}--"},"path":"/datasets/@{encodeURIComponent(encodeURIComponent(outputs('settings')['siteAddress']))}/httprequest","authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"batchData_2":["Succeeded"]},"limit":{"timeout":"P1D"},"metadata":{"flowSystemMetadata":{"swaggerOperationId":"HttpRequest"},"operationMetadataId":"16e4dda3-3bad-46d0-a0ce-a919bada5f25"}},"Results_2":{"type":"Compose","inputs":"@base64ToString(body('sendBatch_2')['$content'])","runAfter":{"SendBatch_2":["Succeeded"]},"description":"When copying a branch, change the 'sendBatch_#' part of the expression below to match the new SendBatch action above. Often it doesn't change the new copy's # in 'SendBatch_#'.","metadata":{"operationMetadataId":"fa9b68d1-10d2-4ca3-8a3a-05c3c14c2f54"}}},"runAfter":{"Filter_array_Remove_items_without_a_key_to_ID_match_in_SharePoint_2":["Succeeded"]},"metadata":{"operationMetadataId":"c2b0cb55-964e-4bd4-8484-fcf245bd3932"}},"Filter_array_Remove_items_without_a_key_to_ID_match_in_SharePoint_2":{"type":"Query","inputs":{"from":"@body('GenerateSPData_2')","where":"@not(equals(item()?['ID'], null))"},"runAfter":{"GenerateSPData_2":["Succeeded"]},"metadata":{"operationMetadataId":"1c5c3129-35c5-444d-9a4f-aad8f88a4446"}},"GenerateSPData_2":{"type":"Select","inputs":{"from":"@body('List_rows_present_in_a_table')?['value']","select":{"__metadata":"@json(concat('{\"type\":\"SP.Data.', if(empty(outputs('settings')['ListWebAddressName']), replace(replace(outputs('settings')['listName'], '_', '_x005f_'), ' ', '_x0020_'), replace(replace(outputs('settings')['ListWebAddressName'], '_', '_x005f_'), ' ', '_x0020_')), 'ListItem\"}'))","ID":"@outputs('Compose_Reformat_keys_to_single_JSON_object_2')?[concat(item()[outputs('settings')['NewDatasourceKeyColumnName']], if(empty(outputs('settings')['NewDatasourceKeyColumnName2']), '', item()[outputs('settings')['NewDatasourceKeyColumnName2']]))]?['ID']","Date":"@addDays('1899-12-30', int(item()['Date']), 'u')","Title":"@item()?['Name']","Email":"@item()?['Email']","Status":"@item()?['Status']"}},"runAfter":{"Compose_Reformat_keys_to_single_JSON_object_2":["Succeeded"]},"description":"In the ID row expression, replace item()?['Email'] with the column(s) in the updated data that make up the keys. Ex: replace it with concat(item()?['ExcelColumnName1'], item()?['ExcelColumnName2']) for a multi-column key.","metadata":{"operationMetadataId":"ce0487d5-63c8-40b4-9b4c-5229c0439c94"}},"Compose_Reformat_keys_to_single_JSON_object_2":{"type":"Compose","inputs":"@json(replace(replace(replace(string(body('Select_Keys_from_Get_items_2')), '[', ''), ']', ''), '},{', ','))","runAfter":{"Select_Keys_from_Get_items_2":["Succeeded"]},"metadata":{"operationMetadataId":"69b1d189-d56f-45fc-8dbb-a49740832a64"}},"Select_Keys_from_Get_items_2":{"type":"Select","inputs":{"from":"@outputs('Get_items_2nd_100000')?['body/value']","select":{"@{concat(item()[outputs('settings')['SharePointKeyColumnName']], if(empty(outputs('settings')['SharePointKeyColumnName2']), '', item()[outputs('settings')['SharePointKeyColumnName2']]))}":"@item()"}},"runAfter":{},"description":"When copying a branch, change the SharePoint value in the From field to the next Get items output that you added at the top of the flow.","metadata":{"operationMetadataId":"dac3de39-a3e5-422a-be37-81089ee64a51"}}},"runAfter":{"batchTemplate":["Succeeded"]},"metadata":{"operationMetadataId":"92a89bdf-e08b-4767-a93f-831f6b8eeb76"}},"batchTemplate":{"type":"Compose","inputs":"--changeset_@{actions('settings')?['trackedProperties']['changeSetGUID']}\nContent-Type: application/http\nContent-Transfer-Encoding: binary\n\nPATCH @{outputs('settings')['siteAddress']}_api/web/lists/getByTitle('@{outputs('settings')['listName']}')/items(|ID|) HTTP/1.1\nContent-Type: application/json;odata=verbose\nAccept: application/json;odata=verbose\nIf-Match: *\n\n|RowData|\n","runAfter":{"settings":["Succeeded"]},"metadata":{"operationMetadataId":"d0af0142-cd1d-437c-97a2-98210ea8dbde"}},"settings":{"type":"Compose","inputs":{"siteAddress":"https://OrgName.sharepoint.com/sites/SiteName/","listName":"ExampleListName","ListWebAddressName":"","batchSize":800,"SharePointKeyColumnName":"Email","SharePointKeyColumnName2":"","NewDatasourceKeyColumnName":"Email","NewDatasourceKeyColumnName2":""},"runAfter":{"List_rows_present_in_a_table":["Succeeded"]},"description":"List to batch update & the batch size (max 1000). Web address name if the list name changed. The column name(s) in SP & in the updated datasource to match in the lookup step (1st SP row /w matching key column value(s) is updated /w the new data).","trackedProperties":{"meta":{"type":"SP.Data.@{outputs('settings')?['listName']}ListItem"},"batchGUID":"@{guid()}","changeSetGUID":"@{guid()}"},"metadata":{"operationMetadataId":"459dc501-ad7e-4252-8540-df307a69607f"}},"List_rows_present_in_a_table":{"type":"ApiConnection","inputs":{"host":{"connection":{"name":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$connections']['shared_excelonlinebusiness_1']['connectionId']"}},"method":"get","path":"/drives/@{encodeURIComponent('b!_EMfBFNtWEOa3ak75AQ0TW2Q1OX85QRDkj8zbxn7udyJYnSyNkLtSYhgHecJU74Y')}/files/@{encodeURIComponent(encodeURIComponent('01RD23GUU5UPXK7LQNWBCITP653FJPSCXW'))}/tables/@{encodeURIComponent('{ED2ABACC-AB30-4ACC-AC19-42CE68FEB007}')}/items","queries":{"source":"me","$top":100000,"$skip":"@add(mul(iterationIndexes('Do_until_Update'), 99998), iterationIndexes('Do_until_Update'))"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"description":"The expression in Skip Count will skip any 100k batches already loaded by previous loop runs. You may need to create something similar if you use any alternative get data action in this Do until loop.","runtimeConfiguration":{"paginationPolicy":{"minimumItemCount":100000}},"metadata":{"016B7R4Y7EON4XZ3K5URCJG7TCJZ2K7B6S":"/Power Automate Files/DateInfo.xlsx","flowSystemMetadata":{"swaggerOperationId":"GetItems"},"016B7R4YYVOTO4F52WHNAZ4NTGFWMYOH66":"/Power Automate Files/thanksgiving-metropolitan-ministries-holidays11-22.xlsx","operationMetadataId":"d3258554-7310-4453-9d1c-103d10112938","016B7R4Y3LVLCEITRXYVBIVHINFYOQURWY":"/Example_Folder/Example_File.xlsx","01RD23GUU5UPXK7LQNWBCITP653FJPSCXW":"/TestExcel.xlsx"}}},"runAfter":{},"description":"If you change the List rows present in a table to something else, change the length() expression below to the length of your new get data action & the 99990 to the new get data batch size. Then insert the action values in GenerateSPData From fields.","metadata":{"operationMetadataId":"f668d1f3-7245-4e88-9952-6b7e2bec05b9"}}},"runAfter":{"Get_items_2nd_100000":["Succeeded"]},"description":"Adjust the \"settings\" compose action to fit your data & datasources. Then adjust the GenerateSPData actions in each branch to include the right SharePoint column names & new updated data for your use-case.","metadata":{"operationMetadataId":"921a4fd4-4def-40df-a301-6402606fa56f"}}}

     

  • takolota1 Profile Picture
    4,980 Moderator on at

    @wskinnermctc Thanks.

     

    I also recently updated the SP Update template to remove a lot of existing table references, so hopefully the regular import zip file method works for more people now.

     

    @hstep yeah, sorry that was the 1st tutorial video I ever did. I should probably go back to see if there are any more ways I could create a simpler version of the flow, while also recording for better video & audio quality.

     

    Is there anything specific you are getting stuck on?

    There is also a similar set-up here that may be easier to follow, but it is slower / less efficient: https://anjcerbolles.com/2022/02/16/batch-update-of-sharepoint-list-item-using-power-automate/amp/

  • hstep Profile Picture
    on at
    ill start off by saying well done for even doing this video - tutorial videos are alot harder than they seem so huge thanks. for me i like a step by step approach that almost spoon feeds it but ill have a go and another look this week at getting this working and feedback 🙂
  • takolota1 Profile Picture
    4,980 Moderator on at

    @hstep @wskinnermctc 

    I found a few things to improve on the flow & added a new version. It should be a bit easier & faster.

    I haven't found anything more I can do to avoid any more import issues with the zip folders.
    But at this rate I will need to create a new video as enough has changed where 1/2 of the previous one doesn't really apply anymore.

    https://powerusers.microsoft.com/t5/Power-Automate-Cookbook/Batch-Update-SharePoint-List/td-p/1365410/page/9

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Introducing the 2026 Season 1 community Super Users

Congratulations to our 2026 Super Users!

Kudos to our 2025 Community Spotlight Honorees

Congratulations to our 2025 community superstars!

Congratulations to the April Top 10 Community Leaders!

These are the community rock stars!

Leaderboard > Power Automate

#1
Vish WR Profile Picture

Vish WR 953

#2
Valantis Profile Picture

Valantis 810

#3
Haque Profile Picture

Haque 622

Last 30 days Overall leaderboard